题解:CF1295D Same GCDs
KingPowers · · 题解
引理:设
证明显然。
同理,对于本题我们先令
转化成了一个经典问题:
这个问题有一种容斥做法,我们先补集转换成有多少个数与
展示下这部分代码:
int calc(int n, int x){
if(!n) return 0;
vector<int> vec;
for(int i = 2; i * i <= x; i++){
if(x % i) continue;
int siz = vec.size() - 1;
For(j, 0, siz) vec.push_back(-vec[j] * i);
while(!(x % i)) x /= i;
vec.push_back(i);
}
if(x > 1){
int siz = vec.size() - 1;
For(j, 0, siz) vec.push_back(-vec[j] * x);
vec.push_back(x);
}
int res = 0;
for(int v : vec) res += n / v;
return n - res;
}
这块复杂度应该是
提交记录