HDU3501 Calculation 2(欧拉函数)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU3501 Calculation 2(欧拉函数)相关的知识,希望对你有一定的参考价值。

题目求小于n不与n互质的正整数的和。

一个结论是小于n与n互质的正整数和=φ(n)*n/2。

  • 因为如果a与n互质,那么n-a也与n互质,即若gcd(a,n)=1则gcd(n-a,n)=1,反证法即可证明。
  • 也就是说小于n与n互质的数是成对的,且它们的和是n,共有φ(n)/2对。
  • 所以小于n与n互质的正整数和=φ(n)*n/2。
 1 #include<cstdio>
 2 #include<cstring>
 3 using namespace std;
 4 int phi(int n){
 5     int res=n;
 6     for(int i=2; i*i<=n; ++i){
 7         if(n%i) continue;
 8         while(n%i==0) n/=i;
 9         res-=res/i;
10     }
11     if(n!=1) res-=res/n;
12     return res;
13 }
14 int main(){
15     int n;
16     while(~scanf("%d",&n) && n){
17         printf("%lld\n",((long long)n*(n-1)/2-(long long)n*phi(n)/2)%1000000007);
18     }
19     return 0;
20 }

 

以上是关于HDU3501 Calculation 2(欧拉函数)的主要内容,如果未能解决你的问题,请参考以下文章

HDU 3501 Calculation 2

杭电3501Calculation 2 欧拉函数

Calculation 2 HDU - 3501

HDU 3501 Calculation 2

HDU——T3501 Calculation 2

hdu 3501 Calculation 2