HDU 3501 Calculation 2---欧拉函数扩展
2014-05-08 15:20
253 查看
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<math.h> #define N 32000 using namespace std; bool h ; int p[4000]; void prime()//筛选求素数 { int cnt=1; int i,j; p[0]=2; for(i=2;i<N;i+=2) h[i]=1; for(i=3;i<N;i+=2) if(!h[i]) { p[cnt++]=i; for(j=i*i;j<N;j+=i) h[j]=1; } } __int64 solve(__int64 n)//求与小于n互质的数字的个数 { int m=(int)sqrt(n*1.0); __int64 r=n,tp=n; int i; for(i=0;p[i]<=m;i++) if(n%p[i]==0) { tp=tp/p[i]*(p[i]-1); while(n%p[i]==0) n/=p[i]; if(n==1) break; } if(n>1) tp=tp/n*(n-1); return tp; } int main()// 欧拉公式的引伸:小于或等于n的数中,与n互质的数的总和为:φ(x) * x / 2。(n>1) { prime(); __int64 i,j,n; while(scanf("%I64d",&n)!=EOF&&n) { __int64 k=solve(n); k=k*n/2; __int64 sum=n*(n-1)/2; sum-=k; printf("%I64d\n",sum%1000000007); } return 0; }
相关文章推荐
- hdu 4333 Revolving Digits (扩展kmp)
- HDU 4333 Revolving Digits [扩展KMP]
- hdu 1695 欧拉函数 + 容斥原理
- HDU 1576 A/B 【带简单处理的扩展欧几里得】
- [HDU](1576) A/B ----扩展欧几里德(数论)
- HDU 2239 机器人的项链(Polya+快速幂模+欧拉函数)
- HDU 3613 Best Reward(扩展KMP)
- 扩展的欧几里得算法求逆元 hdu-3240-Counting Binary Trees
- HDU-4279 Number 欧拉函数,因子分解综合
- hdu 6153 A Secret(kmp||扩展kmp)
- 欧拉函数 hdu 2824
- 2018-01-15 HDU 5514 Ver.A 数论 GCD 欧拉函数 总结归纳
- HDU 2669 Romantic(扩展欧几里德)
- hdu 3501(欧拉函数的应用)
- hdu 4893 欧拉函数
- HDU 6153 A Secret【扩展KMP】
- hdu 2588 欧拉函数的应用
- HDU 4002 Find the maximum(欧拉函数)
- hdu 1286 找新朋友(欧拉函数)
- hdu 3049 Data Processing(扩展欧几里德求逆元)