hdu-Calculation 2(欧拉函数)
2014-04-07 17:26
477 查看
众所周知 若(n,x)= 1,则 (n,n-x)=1;
所以只需求出n的欧拉函数值,则1~n-1中与n互素的和为m = Euler(n)* n / 2;
那么不互素的和为n*(n-1)/ 2 - m;
#include<stdio.h>
#include<math.h>
typedef __int64 LL;
const LL mod = 1000000007;
LL Euler(LL x)
{
LL res = x;
for(int i = 2;i <= sqrt(x);i++)
{
if(x%i==0)
{
while(x%i==0) x/=i;
res = res/i*(i-1)%mod;
}
}
if(x > 1) res = res/x*(x-1)%mod;
return res;
}
int main()
{
LL n;
while(scanf("%I64d",&n),n)
{
LL m = Euler(n);
printf("%I64d\n",(((n*(n-1)/2)%mod - m*n/2%mod)+mod)%mod);
}
}
所以只需求出n的欧拉函数值,则1~n-1中与n互素的和为m = Euler(n)* n / 2;
那么不互素的和为n*(n-1)/ 2 - m;
#include<stdio.h>
#include<math.h>
typedef __int64 LL;
const LL mod = 1000000007;
LL Euler(LL x)
{
LL res = x;
for(int i = 2;i <= sqrt(x);i++)
{
if(x%i==0)
{
while(x%i==0) x/=i;
res = res/i*(i-1)%mod;
}
}
if(x > 1) res = res/x*(x-1)%mod;
return res;
}
int main()
{
LL n;
while(scanf("%I64d",&n),n)
{
LL m = Euler(n);
printf("%I64d\n",(((n*(n-1)/2)%mod - m*n/2%mod)+mod)%mod);
}
}
相关文章推荐
- hdu 3501 Calculation 2 欧拉函数
- HDU 3501 Calculation 2(欧拉函数)
- 【数论-欧拉函数】HDU 3501 Calculation 2 ( 与n不互质的数的和 )
- HDU 3501 Calculation 2 (欧拉函数||容斥原理)
- HDU 3501 Calculation 2(欧拉函数的应用)
- hdu 3501 Calculation 2 (欧拉函数)
- HDU -- 3501 Calculation 2 【欧拉函数性质的应用】
- 【稍优化点的欧拉函数】hdu 3501 Calculation 2
- [HDU]3501 Calculation 2 [欧拉函数之求和]
- hdu 3501 Calculation 2 (欧拉函数)
- hdu - 3501 - Calculation 2-(欧拉函数求互质数的和)
- HDU 3501 Calculation 2 (欧拉函数应用)
- HDU 3501-Calculation 2(欧拉函数)
- HDU 3501 Calculation 2(欧拉函数)
- HDU 3501 Calculation 2 (欧拉函数)
- hdu 2837 Calculation【欧拉函数,快速幂求指数循环节】
- HDU 3501 Calculation 2 (欧拉函数)
- hdu 3501 Calculation 2 (欧拉函数的延伸)
- HDU 3501 Calculation 2(欧拉函数)
- HDU 3501 Calculation 2------欧拉函数变形