1. 程式人生 > >尤拉函式模板(acm筆記)

尤拉函式模板(acm筆記)

直接轉載過來,寫的很好

尤拉函式模板(求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;
}