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

[水+整数分解] poj 1365 Prime Land

时间:2015-04-28 22:58:36      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:

题意:

给2*n个数,输入的这些数构成 sum=(a[1]^b[1])*(a[2]^b[2])...

其实就是整数分解完的数。

然后让你输出分解sum-1的结果。

从大到小。

思路:

就是输入麻烦点。

注意题目说了1的时候要输出空行。

代码:

#include"cstdlib"
#include"cstdio"
#include"cstring"
#include"cmath"
#include"queue"
#include"algorithm"
#include"iostream"
#include"map"
#include"stack"
#include"vector"
#define ll __int64
#define inf -999999999999999999LL
using namespace std;
char v[123456];
#define MAXN 100007
bool mark[MAXN];
int ss[MAXN/3],sscnt;
int ans1[MAXN/3],ans2[MAXN/3];
void ssb()
{
    sscnt=0;
    memset(mark,false,sizeof(mark));
    mark[0]=mark[1]=true;
    for(int i=2; i<=MAXN; i++)
    {
        if(!mark[i])
        {
            for(int j=i+i; j<=MAXN; j+=i) mark[j]=true;
            ss[sscnt++]=i;
        }
    }
    return ;
}
int main()
{
    ssb();
    while(gets(v),strcmp(v,"0"))
    {
        int f=0,i=0;
        ll a=0,b=0;
        ll sum=1;
        while(v[i])
        {
            if(v[i]>='0' && v[i]<='9')
            {
                while(v[i]>='0' && v[i]<='9')
                {
                    if(!f) a=a*10+v[i]-'0';
                    else b=b*10+v[i]-'0';
                    i++;
                }
                if(f==1)
                {
                    sum*=(ll)(pow(a*1.0,b*1.0)+0.0000001);
                    a=0;
                    b=0;
                }
                f^=1;
            }
            else i++;
        }
        sum--;
        int kx=0;
        for(int i=0; i<sscnt; i++)
        {
            if((ll)ss[i]>sum) break;
            if(sum%ss[i]==0)
            {
                int tep=0;
                while(sum%ss[i]==0)
                {
                    tep++;
                    sum/=ss[i];
                }
                ans1[kx]=i;
                ans2[kx++]=tep;
            }
        }
        if(kx==0)
        {
            puts("");
            continue;
        }
        for(int i=kx-1;i>=0;i--)
        {
            printf(i==0?"%d %d\n":"%d %d ",ss[ans1[i]],ans2[i]);
        }
    }
    return 0;
}


[水+整数分解] poj 1365 Prime Land

标签:

原文地址:http://blog.csdn.net/wdcjdtc/article/details/45341553

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