欧拉函数:
在数论中,对正整数n,欧拉函数是少于等于n的数中与n互质的数的数目。
n的所有素因子的和就是euler[n] * n / 2;
欧拉函数的求法是eluer[n] = n * (1 - 1 / p1) * (1-1/p2) .......p1, p2是n的素因子,就是对于每个n的素因子都有n * 1 / pi个小于等于n的因子,要去除他们,但是因子之间可能会有重复,所以要连乘,每次去除的都是上一次基础上剩余的因子。
欧拉定理
a与p互质,a^x==1(mod p)则x==euler[p];
//直接求解欧拉函数 long long euler(long long n) { long long res=n,a=n; for(long long i=2;i*i<=a;i++) if(a%i==0) { res=res/i*(i-1); while(a%i==0) a/=i; } if(a>1) res=res/a*(a-1); return res; } //筛选法打欧拉函数表 long long eul[N]; void init() { eul[1]=1; for(long long i=2;i<N;i++) eul[i]=i; for(long long i=2;i<N;i++) if(eul[i]==i) for(long long j=i;j<N;j+=i) eul[j]=eul[j]/i*(i-1); }