您的位置:首页 > 其它

[POJ2407] Relatives

2017-01-17 15:09 260 查看

题目描述

给出一个正整数n,小于n且和n互素的正整数有多少个?

两个整数称作是互素的,当且仅当不存在整数x>1,y>0,z>0,使得a=xy and b=xz。

输入格式

输入数据有多组,每组数据占一行,输入n(n<=10^9)。当n=0时结束。

输出格式

对应每组输入数据,输出一行为相应的结果。

样例数据

样例输入

7

12

0

样例输出

6

4

题目分析

求单个欧拉函数

源代码

#include<algorithm>
#include<iostream>
#include<iomanip>
#include<cstring>
#include<cstdlib>
#include<vector>
#include<cstdio>
#include<cmath>
#include<queue>
using namespace std;
inline const long long Get_Int() {
long long num=0,bj=1;
char x=getchar();
while(x<'0'||x>'9') {
if(x=='-')bj=-1;
x=getchar();
}
while(x>='0'&&x<='9') {
num=num*10+x-'0';
x=getchar();
}
return num*bj;
}
int Euler_Phi(int n) { //求出n的欧拉函数
int ans=n;
for(int i=2; i<=sqrt(n); i++)
if(n%i==0) {
ans=ans/i*(i-1);
while(n%i==0)n/=i;
}
if(n>1)ans=ans/n*(n-1);
return ans;
}
int main() {
while(true) {
int n=Get_Int();
if(n==0)break;
printf("%d\n",Euler_Phi(n));
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息