UVA10622

来源:互联网 发布:ubuntu改装win10 编辑:程序博客网 时间:2024/06/07 12:34

代码比较简单,唯一分解

// UVA 10622#include <iostream>#include <vector>using namespace std;typedef long long ll;#define PMAX 50000int a[PMAX];vector<ll> prime;void init(){    for(ll i=2 ; i*i<PMAX; i++){        if(a[i]) continue;        for(ll j=i*i;j<PMAX;j+=i) a[j]=1;    }    for(int i =2; i< PMAX; i++)        if(!a[i]) prime.push_back(i);}int gcd(int a ,int b){    return b == 0? a : gcd(b, a%b);}int solve(ll n){    ll nn=n;    n= n<0? -n:n;    int ans=0;    for( int i = 0; i< prime.size() && prime[i]<=n ; i++){        int num =0 ;        while (n % prime[i] == 0){            num++;            n /= prime[i];        }        ans =gcd(ans , num);    }    if( ans == 0) ans =1;    if(nn < 0){        while(ans % 2 ==0) ans =(ans>>1);    }    return ans;}int main(){    init();    ll nn;    while(cin>>nn ,nn){        cout<<solve(nn)<<endl;    }    return 0;}//int is_prime(int num){//    if(num==1) return 0;//    if(num<PMAX) return !p[num];//    for(int i = 2; i*i <  num && i < PMAX; i++){//        if(p[i]) continue;//        if(num%i==0) return 0;//    }//    return 1;//}


0 0
原创粉丝点击