网络推广公司案例,优化seo排名,崇义县网站建设,公司注册资金可以变更减少吗分析#xff1a;如果两个数的最大公约数是一个质数p#xff0c;那么这两个数都除以p#xff0c;得到的两个数的最大公约数一定是1.
反证法#xff1a;如果得到的两个数的最大公约数不是1#xff0c;那么把此时的最大公约数乘以上边的最大公约数#xff0c;得到的一定比上… 分析如果两个数的最大公约数是一个质数p那么这两个数都除以p得到的两个数的最大公约数一定是1.
反证法如果得到的两个数的最大公约数不是1那么把此时的最大公约数乘以上边的最大公约数得到的一定比上述的最大公约数大那么上述的最大公约数就不是最大那两个数的最大公约数所以结论错误。即得到的两个数的最大公约数一定是1.
由于发现两个数都除以p之后得到的数的最大公约数是1那么我们可以想到欧拉函数此时就可以先处理欧拉函数和欧拉函数的前缀和然后枚举1~n的所有质数每次求1~n/p下取整中与n/p下取整互质的个数由于1221属于两个那么还需要乘以21111属于1个最后还得减去1.
#includebits/stdc.husing namespace std;const int N 1e7 10;int hpi[N];
int primes[N],cnt;
bool st[N];
int n;
long long s[N];void init()
{hpi[1]1;for(int i2;in;i){if(!st[i]) {primes[cnt]i;hpi[i]i-1;}for(int j0;primes[j]n/i;j){st[primes[j]*i]true;if(i%primes[j]0){hpi[primes[j]*i]primes[j]*hpi[i];break;}hpi[i*primes[j]]hpi[i]*(primes[j]-1);}}for(int i1;in;i) s[i]s[i-1]hpi[i];
}
int main()
{cinn;init();long long res0;for(int i0;icnt;i){int pprimes[i];res(2*s[n/p]-1);}coutresendl;return 0;
}