码迷,mamicode.com
首页 > 其他好文 > 详细

【数论-欧拉函数】HDU 3501 Calculation 2 ( 与n不互质的数的和 )

时间:2015-04-15 21:32:55      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:acm   欧拉函数   

【题目链接click here~

【题目大意】给定整数n,求与n不互质的数的和,最后mod1e9+7

【解题思路】我们利用欧拉函数和欧几里德定理,if  gcd(n,i)==1 ,则有 gcd(n,n-i)==1 ,可以知道 其中一个若为i则存在一个为n-i 那么二者之和为n  ,这样的一共有eular(n)/2对  故与n互质的所有数的和为 n*eular(n)/2 那么与n不互质的 数就是(n)*(n-1)/2-n*eular(n)/2
【source】 2010 ACM-ICPC Multi-University Training Contest(7)——Host by HIT 

代码:

#include <bits/stdc++.h>
using namespace std;
const int mod=1e9+7;
typedef __int64 lint;
lint  eular(lint  n)
{
    int res=1;
    for(int i=2;i*i<=n;i++){
        if(n%i==0){
           n/=i,res*=i-1;
            while(n%i==0)
                n/=i,res*=i;
        }
    }
    if(n>1)
       res*=n-1;
    return res;
}
int main()
{
    lint n,res;
    while(scanf("%I64d",&n)!=EOF){
        if(!n) break;
      res=((n)*(n-1)/2-n*eular(n)/2)%mod;
         printf("%I64d\n",res%mod);
    }
    return 0;
}


【数论-欧拉函数】HDU 3501 Calculation 2 ( 与n不互质的数的和 )

标签:acm   欧拉函数   

原文地址:http://blog.csdn.net/u013050857/article/details/45064387

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!