欧拉函数模板(acm笔记)

https://www.cnblogs.com/handsomecui/p/4755455.html

直接转载过来,写的很好

欧拉函数模板(求1~N之间与N互质的数的个数)包括1

也可以用打表的方法写

#include 
#include 

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;
}

 

你可能感兴趣的:(acm,数论)