POJ 1365 Prime Land(整数拆分)

Posted icode-xiaohu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ 1365 Prime Land(整数拆分)相关的知识,希望对你有一定的参考价值。

  题意:感觉题意不太好懂,题目并不难,就是给一些p和e,p是素数,e是指数,然后把这个数求出来,设为x,然后让我们逆过程输出x-1的素数拆分形式,形式与输入保持一致。

  思路:素数打表以后正常拆分即可。

  注意:输入过程需要优化,我以前经常使用字符串模拟的方式,后来发现那种方法比较笨,还是下面的方法简洁;代码如下:

  

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
#define LL long long
#define maxn 35000
int prime[maxn],e[maxn];
void make_prime()
{
    memset(prime,1,sizeof(prime));
    prime[0] = prime[1] = 0;
    for(int i = 2; i < maxn; i++)
    {
        for(int j = 2*i; j < maxn; j+=i)
        {
            prime[j] = 0;
        }
    }
}
int main()
{
    int a,b;
    char op;
    LL num = 1;
    make_prime();
    while(~scanf("%d",&a))
    {
        if(a == 0) break;
        scanf("%d",&b);
        num = powl(a,b);
        op = getchar();
        if(op ==  )
        {
            while(~scanf("%d%d",&a,&b))
            {
                op = getchar();
                //printf("a = %d  b = %d op = %c\n",a,b,op);
                num *= powl(a,b);
                if(op !=  ) break;
            }
        }
        num = num-1;
        int start,End,flag = 0;
        memset(e,0,sizeof(e));
        for(int i = 2; i <= 32767; i++)
        {
            if(num == 1) break;
            if(prime[i])
            {
                while(num % i == 0)
                {
                    e[i]++;
                    num /= i;
                }
                if(e[i] != 0)
                {
                    if(!flag)
                    {
                        flag = 1;
                        start = i;
                    }
                    End = i;
                }
            }
        }
        for(int i = End; i >= start; i--)
        {
            if(e[i] != 0)
            {
                if(i!=start) printf("%d %d ",i,e[i]);
                else printf("%d %d\n",i,e[i]);
            }
        }
    }
    return 0;
}

 

以上是关于POJ 1365 Prime Land(整数拆分)的主要内容,如果未能解决你的问题,请参考以下文章

[暑假集训--数论]poj1365 Prime Land

Prime Land(poj 1365)

POJ1365 Prime Land质因数分解素数水题

pku1365 Prime Land (数论,合数分解模板)

筛选法 || POJ 1356 Prime Land

POJ1811_Prime TestMiller Rabin素数測试Pollar Rho整数分解