#include <iostream> using namespace std; #define N 100000001 int euler(int n) { int ans=1; int i; for(i=2;i*i<=n;i++) { if(n%i==0) { n/=i; ans*=i-1; while(n%i==0) { n/=i; ans*=i; } } } if(n>1) ans*=n-1; return ans; } int main() { int n; while(scanf("%d",&n),n) { printf("%d/n",n-1-euler(n)); } return 0; } 下面是另外一种(筛选法) #include <iostream> using namespace std; #define N 100005 #define ll __int64 ll eule[N]; int p[N][15]; int num[N]; void init() { int i,j; eule[1]=1; for(i=2;i<N;i++)//筛选法得到数的素因子及每个数的欧拉函数值 { if(!eule[i]) { for(j=i;j<N;j+=i) { if(!eule[j]) eule[j]=j; eule[j]=eule[j]*(i-1)/i; p[j][num[j]++]=i; } } eule[i]+=eule[i-1]; } }