关闭

小于n的数中与n互质的数的和

标签: 数论
611人阅读 评论(0) 收藏 举报
分类:

转:http://blog.csdn.net/zhangwei1120112119/article/details/8568364

题意:

给一个n,求

少于或等于n的数中与n不互质的数的和

我们先求

少于或等于n的数中与n互质的数的和

对于i与n互素

gcd(n,i)=1

必有gcd(n,n-i)=1

设n的欧拉函数值为f[n]

则有f[n]个数与n互素,这些数两两相加必等于n

于是有答案为f[n]*n/2


#include<stdio.h>
#include<string.h>
#define ll long long
#define mod 1000000007

ll eular(ll n){  
    ll ret=1,i;  
    for (i=2;i*i<=n;i++)  
        if (n%i==0){  
            n/=i,ret*=i-1;  
            while (n%i==0)  
                n/=i,ret*=i;  
        }  
    if (n>1)  
        ret*=n-1;  
    return ret;  
} 

int main()
{
	ll n;
	while(scanf("%lld",&n),n)
	{
		ll t1=(n-1)*n/2;
		ll t2=eular(n)*n/2;
		ll sum=((t1-t2)+mod)%mod;
		printf("%lld\n",sum);
	}
}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:107740次
    • 积分:3119
    • 等级:
    • 排名:第11438名
    • 原创:212篇
    • 转载:21篇
    • 译文:0篇
    • 评论:1条
    最新评论