UVa10622 Perfect P-th Powers
2014-07-30 12:25
387 查看
题意:对于整数x,如果存在整数b使得x=b^p,则x是一个完全p次方数。输入整数n,求出最大的p,使得n是完全p次方数。n绝对值d至少是2,在int范围内。
思路:唯一分解定理。先考虑正数的情况,将n分解为若干个素数的若干次幂的积,答案就是最小的非零指数。如果输入是负数,取绝对值分解,答案如果是偶数,就除以2,除到奇数为止。因为负数的偶次方是得不到负数的。
思路:唯一分解定理。先考虑正数的情况,将n分解为若干个素数的若干次幂的积,答案就是最小的非零指数。如果输入是负数,取绝对值分解,答案如果是偶数,就除以2,除到奇数为止。因为负数的偶次方是得不到负数的。
#include <iostream> #include <stdio.h> #include <cmath> #include <algorithm> #include <iomanip> #include <cstdlib> #include <string> #include <memory.h> #include <vector> #include <queue> #include <stack> #include <map> #include <set> #include <ctype.h> #include<time.h> #define INF 1000000 using namespace std; bool vis[50000]; long long primes[5140]; int main(){ memset(vis,0,sizeof(vis)); vis[0]=vis[1]=true; for(int i=2;i<=223;i++){ for(int j=i*i;j<50000;j+=i){ vis[j]=true; } } int cnt=0; for(int i=1;i<50000;i++){ if(!vis[i])primes[++cnt]=i; } int a; while(cin>>a){ if(!a)break; bool flag=a>0; a=abs(a); int ans=INF; for(int i=1;i<=cnt;i++){ int time=0; while(!(a%primes[i])){ a/=primes[i]; time++; } if(time){ ans=min(ans,time); } } if(a>1){ cout<<1<<endl; }else{ if(!flag){ while(!(ans%2)){ ans/=2; } } cout<<ans<<endl; } } return 0; }
相关文章推荐
- uva 10622 Perfect P-th Powers // poj 1730 Perfect P-th Powers
- UVa 10622 - Perfect P-th Powers
- UVA - 10622 Perfect P-th Powers
- UVa 10622 - Perfect P-th Powers
- UVa 10622 - Perfect P-th Powers
- UVA 10622 - Perfect P-th Powers
- UVA 10622 Perfect P-th Powers
- UVa 10622 (gcd 分解质因数) Perfect P-th Powers
- uva 10622——Perfect P-th Powers
- uva10622 Perfect P-th Powers
- UVA - 10622 Perfect P-th Powers
- UVa 10622 - Perfect P-th Powers(数论)
- UVA 10622(p343)----Perfect Pth Powers
- UVa 10622 - Perfect P-th Powers(对数+快速幂)
- UVA 10622 - Perfect P-th Powers(数论)
- UVA 10622 - Perfect P-th Powers(数论)
- Perfect P-th Powers UVA - 10622
- uva 10622 - Perfect P-th Powers(数论)
- UVA 10622 Perfect P-th Powers (唯一分解定理 + GCD)
- UVA 10622 Perfect P-th Powers(数论)