【POJ 2407】Relatives(欧拉函数-水题)

来源:互联网 发布:java 获取文件路径 编辑:程序博客网 时间:2024/06/01 16:59


点击打开题目


Relatives
Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 14862 Accepted: 7467

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

7120

Sample Output

64

Source

Waterloo local 2002.07.01


题意:找出在1~n 之间有几个与n互素的数。
题解:直接套欧拉函数模板。

代码:
#include<iostream>#include<algorithm>#include<cmath>using namespace std;int Eular(int n)  {      int ans=1;      for (int i=2;i<=sqrt((double)n);i++)      {          if (n%i==0)          {              n/=i;              ans*=(i-1);              //若n有个因子是i的k次,根据欧拉公式有下面的代码              while (n%i==0)               {                  n/=i;                  ans*=i;              }          }      }      if (n>1)     //若最后剩的数为大于5的素数,根据欧拉公式再算进去           ans*=(n-1);      return ans;  } int main(){int n;while(cin>>n&&n){int ans=1;if(n>2)cout<<Eular(n)<<endl;elsecout<<"0"<<endl;}return 0;}






原创粉丝点击