Link:http://poj.org/problem?id=2407
|
Relatives
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 Source |
AC code:
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<queue>
#include<map>
#include<stack>
#include<vector>
#define LL long long
#define MAXN 100010
using namespace std;
//直接求解欧拉函数
int euler(int n){ //返回euler(n)
int res=n,a=n;
for(int i=2;i*i<=a;i++){
if(a%i==0){
res=res/i*(i-1);//先进行除法是为了防止中间数据的溢出
while(a%i==0) a/=i;
}
}
if(a>1) res=res/a*(a-1);
return res;
}
int main()
{
int n;
while(~scanf("%d",&n))
{
if(n==0)
break;
printf("%d\n",euler(n));
}
return 0;
}

本文提供了一道关于求解小于给定正整数n且与n互质的所有正整数数量的问题——POJ 2407 Relatives的详细解答。通过输入一系列测试用例,程序将输出每个用例中符合条件的数的数量。文章包含完整的AC代码实现,该代码使用了求解欧拉函数的方法来解决这个问题。
2231

被折叠的 条评论
为什么被折叠?



