欧拉函数
2012-04-21 15:47
417 查看
小于x且与x互素的正整数的个数
如果x为素数,则欧拉函数等于x-1
求法:将x分解为p1^n1*p2^n2*…pk^nk,则
欧拉函数=x*(1-1/p1)*(1-1/p2)…*(1-1/pk);
代码如下:
如果x为素数,则欧拉函数等于x-1
求法:将x分解为p1^n1*p2^n2*…pk^nk,则
欧拉函数=x*(1-1/p1)*(1-1/p2)…*(1-1/pk);
代码如下:
#include<iostream> using namespace std; #include<string.h> #include<math.h> #define M 10000 int p[M],a[M+1],p1[M]; void prime() { memset(a,0,sizeof(a)); int i,j,k=0,m; m=(int)(sqrt(M*1.0)); for(i=2;i<=m;i++) { if(!a[i]) { p[k++]=i; for(j=i*i;j<=M;j+=i) a[j]=1; } } for(i=m+1;i<=M;i++) if(!a[i]) p[k++]=i; } bool is_prime(int n) { if(n<=1)return false; else { int m=(int)(sqrt(n*1.0)); for(int i=2;i<=m;i++) if(n%i==0)return false; return true; } } int main() { int n; prime(); while(1) { cin>>n; int i,k=0; double s=1.0*n; if(is_prime(n)) s=s-1; else { for(i=0;p[i]<=n/2;i++)//找出质因子 经过分析只需p[i]<=n/2即可 { if(n%p[i]==0) p1[k++]=p[i]; } for(i=0;i<k;i++) { s=s*(1.0-1.0/p1[i]); } } printf("%.0lf\n",s); } return 0; }
相关文章推荐
- 线性求欧拉函数
- 欧拉函数板子
- BZOJ2005 [Noi2010]能量采集 递推+容斥/欧拉函数
- 欧拉函数
- poj 3090 Visible Lattice Points (欧拉函数)
- Light oj 1370 Bi-shoe and Phi-shoe(素数打表 + 欧拉函数)
- hdu 5514 Frogs 容斥或欧拉函数
- 容斥原理+欧拉函数
- 数论素数筛法以及用欧拉筛求欧拉函数
- 数论 day 2 CRT 素数筛 逆元 欧拉函数 (板子)
- 【HDU4676】Sum Of Gcd-莫队算法+欧拉函数
- (数论)欧拉函数
- 欧拉函数线性筛
- BZOJ 2226: [Spoj 5971] LCMSum(数论+欧拉函数)
- 由素数筛法到欧拉函数(欧拉函数,线性筛)
- BZOJ3560 DZY Loves Math V(欧拉函数)
- 欧拉函数
- 欧拉函数(模板)
- sicily 1089 欧拉函数递推
- POJ 3090 Visible Lattice Points 【欧拉函数】