欧拉函数---预处理打表

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int maxn=1e7+5;
 4 int n,phi[maxn];
 5 void phi_table(){
 6     phi[0]=0,phi[1]=1;//1的欧拉函数值为1,唯一与1互质的数
 7     for(int i=2;i<maxn;++i)phi[i]=i;//先初始化为其本身
 8     for(int i=2;i<maxn;++i){
 9         if(phi[i]==i){//如果欧拉函数值仍为其本身,说明i为素数
10             for(int j=i;j<maxn;j+=i)//把i的欧拉函数值改变,同时也把能被素因子i整除的数的欧拉函数值改变
11                 phi[j]=phi[j]/i*(i-1);
12         }
13     }
14 }
15 int main(){
16     phi_table();
17     while(cin>>n&&n)
18         cout<<phi[n]<<endl;
19     return 0;    
20 }

 

posted @ 2018-08-05 10:17  霜雪千年  阅读(271)  评论(0编辑  收藏  举报