程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> [水+整數分解] poj 1365 Prime Land

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

編輯:C++入門知識

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


題意:

給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; isum) 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;
}


 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved