求欧拉函数(求1~n 中与 某个数值n互质的值的个数)
作者:
啦啦啦123
,
2021-04-13 23:33:57
,
所有人可见
,
阅读 398
求欧拉函数(求1~n 中与 数值n互质的值的个数)
数学公式:
N = (p1 ^ n1) * (p2 ^ n2) * (p3 ^ n3) * ... * (pj ^ nj);
则欧拉函数的值:
g(N) = N * (1 - 1 / p1) * (1 - 1 / p2) * (1 - 1 / p3) * ... * (1 - 1 / pj);
代码实现:
int temp ;
scanf("%d",&temp);
long long res = temp;
for(int i = 2 ; i <= temp / i ; i++)
{
if(temp % i == 0)
{
res = res / i * (i - 1); //不能使用res = res * (1 - 1 / i); 因为res 这个时候包含了temp , 而temp % i == 0, 所以res / i 不会有小数存在。
while(temp % i == 0)
{
temp /= i;
}
}
}