【金牌导航】【欧拉函数】整数个数
题目
解题思路
由1得:所以我们要求与n互质的数的个数
由2得:要求n的因子个数
3则规定了求的范围
最后用n减去它们即可
代码
#include<iostream>
#include<cstdio>
using namespace std;
int n,t,phi,tot=1,num[50000];
int main()
{
scanf("%d",&n);
phi=n;
int x=n;
for (int i=2;1ll*i*i<=n;i++)
if (n%i==0)
{
t++;
phi=phi/i*(i-1); //除i是计算i有多少个含i的因子 (我也不是很清楚qwq)
while (n%i==0) n/=i,num[t]++;
if (n==1) break;
}
if (n>1) phi=phi/n*(n-1),num[++t]++;
for (int i=1;i<=t;i++)
tot=tot*(num[i]+1); //计算因子个数
printf("%d",x-tot-phi+1); //+1是因为1既是x的因数也和x互质,重复减了要加回来
return 0;
}