学习的过程中学到了欧拉函数,做个总结,对数论,对正整数n,欧拉函数是小于或等于n的数中与n互质的数的数目,(φ(1)=1)例如φ(8)=4,因为1,3,5,7均和8互质。
互质数的个数
这里我们定义φ(n) 表示所有小于等于 n 与 n 互质数的个数。
例如 φ(10)=4,因为我们可以在 1∼10 中找到 1,3,7,9 与 10 互质。
输入格式
第一行输入一个整数 t,表示测试数据组数。
接下来 t 行,每行有一个整数 n。
输出格式
对于每组测试数据输出 φ(n) 。
数据范围
1≤t≤100,1≤n≤10^10。
Sample Input
3 2 10 100
Sample Output
1 4 40
代码如下:
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
long long int n,t;
cin>>t;
while(t--)
{
cin>>n;
long long int ans=n;
for(int i=2;i<=sqrt(n);i++)
{
if(n%i==0)
{
ans=ans/i*(i-1);
while(n%i==0)
{
n=n/i;
}
}
}
if(n>1)
ans=ans/n*(n-1);
printf("%lld\n",ans);
}
return 0;
}
堆堆加油💪