https://www.cnblogs.com/handsomecui/p/4755455.html
直接转载过来,写的很好
欧拉函数模板(求1~N之间与N互质的数的个数)包括1
也可以用打表的方法写
#include <iostream>
#include <cmath>
using namespace std;
int Euler(int n)
{
int num=n;
for(int i=2;i<=sqrt(n);i++)
if(n%i==0)
{
num=num/i*(i-1);//先进行除法防止溢出(num=num*(1-1/p(i)))
while(n%i==0)
n/=i;
}
if(n>1)
num=num/n*(n-1);
return num;
}
int main()
{
cout << Euler(100)<< endl;
return 0;
}