码迷,mamicode.com
首页 > 其他好文 > 详细

Prime Land(poj 1365)

时间:2016-09-04 22:09:25      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:

题意:这题题意难懂,看了题解才知道的。比如第二组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)

标签:

原文地址:http://www.cnblogs.com/harden/p/5840258.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!