UVa 10622 - Perfect P-th Powers

来源:互联网 发布:软件cmmi 编辑:程序博客网 时间:2024/06/06 01:03

给出一个数x,找出2 - x中一个数b, 使得x = b ^ p中p最大。

枚举2 - sqrt(x), 如果x小于零则要判断p是不是奇数, 如果x是偶数只需要枚举2, 4, 6, 8...; 如果是奇数则枚举3, 5, 7, 9...。


#include <iostream>#include <cstdio>#include <cmath>#include <cstdlib>using namespace std;int main() {    #ifndef ONLINE_JUDGE    freopen("test", "r", stdin);    freopen("my", "w", stdout);    #endif // ONLINE_JUDGE    long long n;    while(scanf("%lld", &n)&& n) {        bool neg = false;        long long i, best_cnt = 1;        if(n < 0) {            neg = true;            n = -n;        }        if(n & 1) i = 3;        else i = 2;        for(; i * i <= n; i += 2) {            long long cnt = 0, k = n;            while(!(k % i)) {                cnt++;                k /= i;            }            if(k == 1&&cnt > best_cnt) {                if(!neg)                    best_cnt = cnt;                else if(cnt & 1) best_cnt = cnt;            }        }        printf("%lld\n", best_cnt);    }    return 0;}


0 0
原创粉丝点击