游客 Signup | Login
中文 | En

1065 - 互质

给你一个正整数n,请问有多少个比n小的且与n互质的正整数?
两个整数互质的意思是,这两个整数没有比1大的公约数。

Input

输入包含多组测试数据。每组输入是一个正整数n(n<=1000000000)。当n=0时,输入结束。

Output

对于每组输入,输出比n小的且与n互质的正整数个数。

Examples

Input

7
12
0

Output

6
4

Solution C

#include<stdio.h>

int eular(int n)
{
	int ret=1,i;
	for(i=2;i*i<=n;i++)
		if(n%i==0)
		{
			n/=i;
			ret*=i-1;
			while(n%i==0)
			{
				n/=i;
				ret*=i;
			}
		}
	if(n>1)
		ret*=n-1;
	return ret;
}

int main()
{
	int n;
	while(scanf("%d",&n)!=EOF,n)
		printf("%d\n",eular(n));
	return 0;
}

Solution C++

#include<stdio.h>

int eular(int n)
{
	int ret=1,i;
	for(i=2;i*i<=n;i++)
		if(n%i==0)
		{
			n/=i;
			ret*=i-1;
			while(n%i==0)
			{
				n/=i;
				ret*=i;
			}
		}
	if(n>1)
		ret*=n-1;
	return ret;
}

int main()
{
	int n;
	while(scanf("%d",&n)!=EOF,n)
		printf("%d\n",eular(n));
	return 0;
}
Time Limit 1 second
Memory Limit 32 MB
Discuss Stats
上一题 下一题