Relatives

Given n, a positive integer, how many positive integers less than n are relatively prime to n? Two integers a and b are relatively prime if there are no integers x > 1, y > 0, z > 0 such that a = xy and b = xz.

Input

There are several test cases. For each test case, standard input contains a line with n <= 1,000,000,000. A line containing 0 follows the last case.

Output

For each test case there should be single line of output answering the question posed above.

Sample Input

7
12
0

Sample Output

6
4
#include 
long long prim[1000000];
long long qwe(long long t,long long m) //m表示质因数的个数 
{
	long long ans=0,i,j;
	for(i=1;i<(1<>j&1) //这个就是选与不选(即为i>>j==1时选取) 
			{
				tmp*=prim[j];//1.tmp 就是质因数的组合和ans/tmp 是包含排斥原理的关键
								//就和离散数学学一样 
				flag++;
			}
		}
		if(flag&1) ans+=t/tmp;//2.包含排斥原理奇加偶减 
		else ans-=t/tmp; //3.A+B+C-AB-AC-BC+ABC; 
	}
	return ans;
}
int main()
{
	long long n,i,j,m,t;
	scanf("%lld",&n);
	while(n)
	{
		m=0;
		t=n;
		for(i=2;i*i<=n;i++)
		{
			if(n&&n%i==0)//求质因数 
			{
				prim[m++]=i;
			}
			while(n%i==0)
			{
				n=n/i;
			}
		}
		if(n>1) prim[m++]=n;//注意N>1 时 
		printf("%lld\n",t-qwe(t,m));
		scanf("%lld",&n);
		
	}
	return 0;
}

 

你可能感兴趣的:(Relatives)