• 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
    ",((long long)n*(n-1)/2-(long long)n*phi(n)/2)%1000000007);
    18     }
    19     return 0;
    20 }
  • 相关阅读:
    Inno Setup 下载安装
    The things that I need to face one by one
    GDOI2021 反思总结
    番剧汇总
    matroid课堂笔记 in GDKOI
    多项式持续更新ing
    各大奆的被jc日常
    大事日表
    Important Thing in OI
    整除分块
  • 原文地址:https://www.cnblogs.com/WABoss/p/5183555.html
Copyright © 2020-2023  润新知