poj2407解题报告

Relatives
Time Limit: 1000MS
 
Memory Limit: 65536K
Total Submissions: 6232
 
Accepted: 2786
Description
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
 
题目大意:给定一个数(小于1,000,000,000),求与他互质数的个数。。
 
思路:利用欧拉函数,将n素因子分解,带入欧拉函数求值。。
 
#include<iostream>
#include<cmath>
using namespace std;
__int64 o(__int64 a,__int64 b)
{
	if(!a)
		return b;
	return o(b%a,a);
}
int main()
{
	__int64 i,n,o1,o2,gys;
	while(scanf("%I64d",&n)&&n)
	{
		if(n==1)
		{	cout<<'0'<<endl;	continue;	}
		o1=n;
		o2=1;
		for(i=2;i<=(int)sqrt((double)n);i++)
			if(n%i==0)
			{
				o1*=(i-1);
				o2*=i;
				gys=o(o1,o2);
				o1/=gys;	o2/=gys;
				while(n%i==0)
					n/=i;
			}
		if(n!=1)
		{
			o1*=(n-1);
			o2*=n;
			gys=o(o1,o2);
			o1/=gys;	o2/=gys;
		}
			printf("%I64d/n",o1);
	}

	return 0;
} 

你可能感兴趣的:(Integer,less,input,each,output)