欧拉函数模板

在数论中,对正整数n,欧拉函数是小于或等于n的正整数中与n互质的数的数目。此函数以其首名研究者欧拉命名,它又称为φ函数(由高斯所命名)。

例如,因为1,3,5,7均和8互质。

欧拉函数实际上是模n的同余类所构成的乘法群(即环的所有单位元组成的乘法群)的阶。这个性质与拉格朗日中值一起构成了欧拉定理的证明。

#include <iostream>
#include <vector>
#include <set>
#include <map>
#include <queue>
#include<cstring>
#include <stack>
#include <algorithm>
using namespace std;
#define ll long long
#define N 200005
#define INF 0x3f3f3f3f
#define eps 0.00000001//偏差值1e8
#define pi acos(-1.0)//高精度圆周率
const int maxn = 2e7+2;
const int maxp = 1010;    //点的数量
#define fori for(i=0;i<n;i++)
#define fori1 for(i=1;i<=n;i++)
ll euler(ll n)
{
    ll ret = n;
    for (ll i = 2; i * i <= n; i++)
    {
        if (n % i == 0)
        {
            ret -= ret / i;
            while (n % i == 0)
                n /= i;
        }
    }
    if (n > 1)//存在大于sqrt(a)的质因子
ret -= ret / n;
return ret;
}
int main() 
{
ll n, t, q, ret;
ll i, j, k, x;
ll flag
= 1;
ll sum
= 0,ans=0;
cin
>> n;
cout
<< euler(n) << endl;
}

 

posted @ 2020-04-05 23:32  ch_hui  阅读(237)  评论(0编辑  收藏  举报