您的位置:首页 > 其它

HDU 1787 简单的求欧拉函数 POJ 2047 裸欧拉函数

2012-11-23 17:36 344 查看
HDU 1787题目好水,题目意思要你求最大公约数大于1的个数..

#include<iostream>

#include<cmath>

using namespace std;

int euler(int n){  /// 把公式翻译成代码就行了..

    int sum=1;

    for(int i=2;i*i<=n;i++){

        int a=0;

        if(n%i==0){

            while(n%i==0){

                n /= i;

                a++;

            }

        }

        if(a){

            sum = sum * (i-1) * (int)pow(i*1.0,a-1);

        }   

    }

    if(n>1) sum *= (n-1);

    return sum;

}

int main (){

    int n;

    while(cin>>n,n){

        int sum=0;

        sum=euler(n);

        cout<<n-sum-1<<endl;

    }   

}

 

POJ 2047 裸欧拉函数

#include<iostream>

#include<cmath>

using namespace std;

int oula(int n){

    int num=1;

    for(int i=2;i*i<=n;i++){

        int k=0;

        if(n%i==0){

            while(n%i==0){

                k++;

                n /= i;

            }

        }

        if(k){

            num=num*(i-1)*(int)pow(i*1.0,k-1);

        }

    }

    if(n>1) num *= (n-1);

    cout<<num<<endl;

}

int main(){

    int m;

    while(cin>>m,m){

        oula(m);

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: