1. 程式人生 > >51Nod 1136:尤拉函式

51Nod 1136:尤拉函式

https://www.51nod.com/Challenge/Problem.html#!#problemId=1136

對正整數n,尤拉函式是少於或等於n的數中與n互質的數的數目。此函式以其首名研究者尤拉命名,它又稱為Euler's totient function、φ函式、尤拉商數等。例如:φ(8) = 4(Phi(8) = 4),因為1,3,5,7均和8互質。

輸入

輸入一個數N。(2 <= N <= 10^9)

輸出

輸出Phi(n)。

輸入樣例

8

輸出樣例

4

φ(n) = n*(1-1/p1)*(1-1/p2)*......(1-1/pn)   其中(p1.....pn)為N的素因子

 

#include<stdio.h>
int main()
{
	long long n,i,sum;
	scanf("%lld",&n);
	sum=n;
	for(i=2;i*i<=n;i++)
	{
		if(n%i==0)
		{
			sum-=sum*1/i;
			while(n%i==0)
				n/=i;
		}
	}
	if(n!=1)
		sum-=sum*1/n;
	printf("%lld\n",sum);
	return  0;
}