求单个数的欧拉函数

题意:给你一个数n,n很大(n<=100000000),但是题目中的测试数据不是很多,这样的话直接用求单个欧拉函数值的方法求解,如果用前面那种方法打个表的话是行不通的,因为n的值太大不适合开设数组,所以这时应该直接求n的欧拉函数值。

代码实现:

#include<iostream>
#include<cmath>
using namespace std;
int main()
{
    int n,i,temp;
    while(scanf("%d",&n)!=EOF)
    {
        temp=n;
        for(i=2;i*i<=n;i++)
        {
          if(n%i==0)
          {
              while(n%i==0) n=n/i;
              temp=temp/i*(i-1);
          }
          if(n<i+1)
              break;
        }
        if(n>1)
            temp=temp/n*(n-1);
        printf("%d\n",temp);
    }
    return 0;
}

 

posted on 2013-05-27 16:11  后端bug开发工程师  阅读(2334)  评论(0编辑  收藏  举报

导航