/*=======================================================*\ | 递推求欧拉函数phi(i) 欧拉函数\varphi(n)是小于或等于n的正整数中与n互质的数的数目\*=======================================================*/ #define N 3000000__int64 phi[N + 100];void Euler(){ int i, j; for(i = 1; i < N; i++) phi[i] = i; for(i = 2; i < N; i++) if(i == phi[i]) //若i为素数 第一次不是 for(j = i; j < N; j += i) //让j累加i phi[j] = (phi[j] / i) * (i - 1); //求欧拉函数}/*=========================================================*\ 筛选法求一个数的最大素因子在素数表中是第几个素数 利用筛选法得到素数,每次用一个素数更新它的所有倍数, 更新为这个素数的标号, 由于大的素数会更新小的素数,所以最后得到的就是最大素因子\*=========================================================*/ #include <string>#define maxn 1000000int prime[maxn];void f(){ memset(prime, 0, sizeof(prime)); for(int i=2, flag=0; i<maxn; i++) { if(!prime[i]) { flag++; for(int j=i; j<maxn; j+=i) prime[j] = flag; } }}