poj 1730 筛素数+因式分解(Perfect Pth Power)

原创 2015年11月18日 23:43:04

题意:如果一个数n满足n=b^p,那么称n为p完美平方数。给定一个n,求最大的p使得其为p完美的。

思路:先对x进行质因数分解,因为x < 2 ^ 32,所以质因子最大为sqrt(2 ^ 32),把大约小于65537的质数扫一下,然后进行质因子分解。然后求出所有因子的最大公约数就可以得到p。但是当x时负数的时候,只能是奇数次方,所以要将p一直除2直到为奇数为止。

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
#define clr(s,t) memset(s,t,sizeof(s))
#define M 65537
int len,prime[M],used[M+5],s[M];
long long n;
void init(){
    int i,j;
    clr(used, 0);
    len = 0;
    for(i = 2;i<M;i++){
        if(used[i])
            continue;
        prime[len++] = i;
        for(j = i;j<M;j+=i)
            used[j] = 1;
    }
}
int gcd(int x,int y){
    return y?gcd(y, x%y):x;
}
int main(){
    init();
    while(scanf("%lld",&n)&&n){
        int i,j,k,num=-1,res;
        k = n<0;
        if(n<0)
            n = -n;
        for(i = 0;prime[i]<=n && i<len;i++){
            j = 0;
            while(n%prime[i] == 0){
                j++;
                n /= prime[i];
            }
            if(j)
                s[++num] = j;
        }
        if(i==len){//不能完全分解的情况,说明n是个质数
            printf("1\n");
            continue;
        }
        res = s[0];
        for(i = 1;i<=num;i++)
            res = gcd(res, s[i]);
        if(k){//如果是负数,除直到得到奇数
            while(res%2==0)
                res/=2;
        }
        printf("%d\n",res);
    }
    return 0;
}


判断一个数是不是素数 埃拉托斯特尼筛法 时间复杂度 O(n*lglgn)

说明: 素数的定义:质数(prime number)又称素数。一个大于1的自然数,除了1和它本身外,不能被其他自然数整除,换句话说就是该数除了1和它本身以外不再有其他的因数;否则称为合数。 最小的素数...
  • x_i_y_u_e
  • x_i_y_u_e
  • 2015年06月04日 18:36
  • 2865

POJ 2191 Mersenne Composite Numbers 解题报告(大数因式分解)

#include #include #include #include #include using namespace std; //*******************************...
  • kbdwo
  • kbdwo
  • 2014年04月17日 22:29
  • 1037

简单因式分解及利用质数表进行因式分解

简单因式分解,不用质数表,比较简单,就不注释了 int i, n; n = 500; printf("%d = ", n); for(i = 2; i * i ...
  • u011439689
  • u011439689
  • 2013年12月20日 13:43
  • 1749

POJ 1730 Perfect Pth Powers 解题报告(因式分解)

Perfect Pth Powers Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 1634...
  • kbdwo
  • kbdwo
  • 2014年04月21日 15:52
  • 778

poj 1730Perfect Pth Powers(分解质因数)

Perfect Pth Powers Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 16746   Accep...
  • LYHVOYAGE
  • LYHVOYAGE
  • 2014年10月18日 12:26
  • 1451

poj 1730 Perfect Pth Powers

题目大概意思 给你一个x 令 x=b^p 求最大的p 例如 81=9^2=3^4则p的值为 4 一看蒙啦,这怎么求啊,数据范围在2^32次方之内,纠结,这种题一定会有算法, 再看列出几个...
  • chaojiaini
  • chaojiaini
  • 2012年04月18日 17:55
  • 303

poj-1730 Perfect Pth Powers

题目链接:http://poj.org/problem?id=1730 Perfect Pth Powers Time Limit: 1000MS   Memory L...
  • xiaoyu_93
  • xiaoyu_93
  • 2012年03月28日 12:35
  • 453

poj 1730 Perfect Pth Powers 筛法

poj 1730 Perfect Pth Powers 筛法 We say that x is a perfect square if, for some integer b, x = b2. Sim...
  • k_l_c_
  • k_l_c_
  • 2016年08月08日 21:27
  • 190

poj 1730 -- Perfect Pth Powers

http://poj.org/problem?id=1730 Perfect Pth PowersTime Limit: 1000MS Memory Limit: 10000KTotal Submi...
  • zsc09_leaf
  • zsc09_leaf
  • 2011年04月01日 20:50
  • 722

J - Perfect Pth Powers解题报告

J - Perfect Pth Powers Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I6...
  • princeyuaner
  • princeyuaner
  • 2012年03月26日 20:59
  • 289
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:poj 1730 筛素数+因式分解(Perfect Pth Power)
举报原因:
原因补充:

(最多只允许输入30个字)