[关闭]
@ZCDHJ 2018-09-15T13:49:59.000000Z 字数 532 阅读 419

51Nod1040 最大公约数之和

欧拉函数


51Nod

对于 ,我们可以知道 。也就是 互质。那么,枚举每个最大公因数 ,求一下欧拉函数就行了。注意每次枚举 就行了,然后再处理

  1. #include <iostream>
  2. #include <cmath>
  3. #include <cstdio>
  4. typedef long long LL;
  5. int N;
  6. LL Ans;
  7. LL Phi(int x)
  8. {
  9. LL res = x;
  10. int n = sqrt(x);
  11. for(int i = 2; i <= n; ++i)
  12. {
  13. if(x % i == 0)
  14. {
  15. res = res / i * (i - 1);
  16. while(x % i == 0) x /= i;
  17. }
  18. }
  19. if(x > 1) res = res / x * (x - 1);
  20. return res;
  21. }
  22. int main()
  23. {
  24. scanf("%d", &N);
  25. int n = sqrt(N);
  26. for(int i = 1; i <= n; ++i)
  27. {
  28. if(N % i != 0) continue;
  29. Ans += LL(i) * Phi(N / i);
  30. if(i * i != N) Ans += LL(N / i) * Phi(i);
  31. }
  32. printf("%lld\n", Ans);
  33. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注