/*=======================================================*\
| 递推求欧拉函数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 1000000
int 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;
}
}
}
附件列表
时间: 2024-10-08 21:05:56