题目描述
给你一个正整数n,请问有多少个比n小的且与n互质的正整数?
两个整数互质的意思是,这两个整数没有比1大的公约数。
输入
输入包含多组测试数据。每组输入是一个正整数n(n<=1000000000)。当n=0时,输入结束。
输出
对于每组输入,输出比n小的且与n互质的正整数个数。
样例输入 Copy
7
12
0
样例输出 Copy
6
4
代码
#include<cstdio>
#include<cmath>
int main()
{
int N,n;
while(scanf("%d",&N)!=EOF)
{
if(N==0)
break;
n=N;
for(int i=2;i<=sqrt(N);i++)//使用欧拉函数解决的问题;
if(N%i==0)
{
n=n/i*(i-1);
while(N%i==0)
N/=i; //根据欧拉函数的的定义;
}
if(N>1)
n=n/N*(N-1); //这一步不能遗忘;
printf("%d\n",n);
}
return 0;
}