Prime Land(poj 1365)

Posted Cola

tags:

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

题意:这题题意难懂,看了题解才知道的。比如第二组sample,就是5^1*2^1=10, 求10-1即9的质因数分解,从大到小输出,即3^2.本来很简单的嘿,直接最快速幂+暴力最裸的就行了。

#include<cstdio>
#include<cstring>
#include<iostream>
#define M 100010
#define ll long long
using namespace std;
ll x[M],y[M],sum,ans1[M],ans2[M];
int cnt;
ll poww(ll a,ll b)
{
    ll r=1,base=a;
    while(b)
    {
        if(b&1)r*=base;
        base*=base;
        b/=2;
    }
    return r;
}
int main()
{
    while(1)
    {
        cnt=0;sum=1;
        memset(x,0,sizeof(x));
        memset(y,0,sizeof(y));
        while(1)
        {
            ++cnt;
            ll num=0;char c=getchar();
            while(c>=\'0\'&&c<=\'9\')
              num=num*10+c-\'0\',c=getchar();
            x[cnt]=num;
            if(num==0)return 0;
            num=0;c=getchar();
            while(c>=\'0\'&&c<=\'9\')
              num=num*10+c-\'0\',c=getchar();
            y[cnt]=num;
            if(c==\'\\n\')break;
        }
        for(int i=1;i<=cnt;i++)
          sum*=poww(x[i],y[i]);
          
        cnt=0;sum--;
        for(ll i=2;i<=sum;i++)
        {
            ll tot=0;
            while(sum&&sum%i==0)
              sum/=i,tot++;
            if(tot)
            {
                ++cnt;ans1[cnt]=i;ans2[cnt]=tot;
            }
            if(sum==0)break;
        }
        for(ll i=cnt;i>=1;i--)
          cout<<ans1[i]<<" "<<ans2[i]<<" ";
        printf("\\n");
    }
    return 0;
}
View Code

 

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

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

Prime Land(poj 1365)

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

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

筛选法 || POJ 1356 Prime Land

POJ1365:质因数分解