摘要:
原题链接 考察:GCD+前缀和思想 根据题意,最多允许一个区间和其他区间的距离不一样.因此在计算的时候我们需要去掉那个区间.那么剩下的区间取多大呢?可以发现:剩下区间要求的长度一定为它们的最小公倍数.这样才能凑得相等.假设剩下区间要求长度为k,区间需要增加的点数为len/k-1.因此最小的点数就是k 阅读全文
摘要:
原题链接 考察:质数筛+欧拉函数 正确思路: 列出下标从小到大列出欧拉函数的值,可以发现合数的欧拉函数值在前面一定有个比它小的质数取值与它相同.比如phi[4]=2,而在它前面phi[3]已经可以取值2.根据这条性质可以AC此题 易错: 不能只筛到1e6的质数.如果a[i]刚好取值1e6.那么就取不 阅读全文
摘要:
原题链接 考察:STL 错误思路: 用STL的set看是否重复,如果有重复就erase 起始迭代器直到不重复为止 该思路错在set自动排序啊啊!!! 应该可以用C++11的unordered_set.但是这道题可以只用set解 温故知识:set的erase元素可以删除迭代器所指向元素,也可以直接删除 阅读全文
摘要:
原题链接 数论的时间复杂度我真的越来越懵逼.....找个时间再琢磨一下 这道题枚举一定超时.将n分解质因数后也没找到什么规律.因此只能从gcd返回值入手.在int范围内约数最多是1536个.因此是可以枚举约数的 看了大佬的思路: 假设当前数字为i,设gcd(i,n)==k.那么为了简化计算.我们可以 阅读全文
摘要:
原题链接 考察:欧拉函数 orz...AcWing的例题再做一次不会做了..满脑子线性筛开不了那么大的数组.到把原公式忘了.... 其实不用筛质数.直接分解质因数即可 1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 阅读全文
摘要:
原题链接 考察:欧拉函数+递推 数论的每一道题都是看书上的提示才做出来...orz 正确思路: 通过观察发现(要看题目给的图,自己画的图观察不出答案....),当gcd(x,y)==1时.这个点就可见.所以当x与y互质答案就++.考虑到互质可以想到欧拉函数.这道题大正方形的答案可以由小正方形推导出来 阅读全文