Relatives( POJ2407)
给出n(n<1000000000),求小于等于n且与n互质的元素个数。
思路:欧拉函数解决
#include"iostream"
#include"cstdio"
#include"cmath"
using namespace std;
typedef long long LL;
int main()
{
LL n,res;
while(scanf("%lld",&n),n)
{
res=n;
LL i;
LL tmp=(LL)sqrt(n)+1;
for(i=2;i<tmp;i++)
{
if(n%i==0)
{
res=res/i*(i-1);
while(n%i==0)n/=i; //去掉重复的质因子i(保证以后的i为素数)
}
}
if(n>1)res=res/n*(n-1);
printf("%lld\n",res);
}
}