欧拉函数模板
在数论中,对正整数n,欧拉函数是小于或等于n的正整数中与n互质的数的数目。此函数以其首名研究者欧拉命名,它又称为φ函数(由高斯所命名)。
欧拉函数实际上是模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;
}