暂时没有什么理解,只是记住了公式。
欧拉函数:求1~n有多少个数与n互质
公式F(n)=n*(1-1/p1)(1-1/p2)……(1-1/px);
P为n的质因数;
例如8只存在2这个质因数
所以F(8)=8*1/2=4;
而刚好1~8有1,3,5,7与8互质;
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<map>
using namespace std;
int fa[50005];
int Erul[35000];
void prime()
{
for (int i = 2; i < 35000; i++)Erul[i] = 1;
for (int i = 2; i < 35000; i++)
{
if (Erul[i]==1)
{
for (int j = 2*i; j < 35000; j += i)
{
Erul[j] = 0;
}
}
}
}
int main()
{
prime();
int num;
int n;
cin >> n;
while (n--)
{
cin >> num;
double sum = 1;
for (int i = 2; i <= num; i++)
{
if (num % i == 0 && Erul[i] == 1)
{
sum = sum * (1.0 - 1.0 / i);
}
}
cout << num * sum << endl;
sum = 1;
}
}