1006 逆袭指数

来源:互联网 发布:ai mac史蒂芬周 编辑:程序博客网 时间:2024/04/30 01:58
Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1284    Accepted Submission(s): 221


Problem Description
  这依然是关于高富帅小明曾经的故事——

  尽管身处逆境,但小明一直没有放弃努力,除了搬砖,小明还研究过东方的八卦以及西方的星座,一直试图在命理上找到自己能够逆袭的依据。

  当这些都失败以后,小明转向了数学研究,希望从中得到一些信息。一天,小明在研究《BestCoder逆袭的数理基础》这本书时,发现了宝贵的信息,其中写道:
  每个人都存在一个逆袭指数,对于这个逆袭指数,可能存在连续的因子,如果这个连续因子足够长的话,那么这个人逆袭的概率就很大!

  小明已知自己的逆袭指数,请告诉小明他最长的连续因子,以让他来判断他自己是否能够逆袭。
 

Input
输入包含多组测试数据。
每组数据占一行,包含一个整数N,表示小明的逆袭指数,N小于2^31。
 

Output
对于每组数据,请输出2行:
第一行输出最长的因子个数;
第二行输出最小的因子序列,具体请参考样例。

特别说明:由于小明十分讨厌单身,所以1不算因子。
 

Sample Input
63012
 

Sample Output
35*6*722*3
Hint
630 = 3*5*6*7
 
这题题意没有说清楚,如果一个数有多个相同的长度的连续因数,那么输出因数的时候要输出最小的,不然会wa= =


#include<iostream>#include<stdio.h>#include<stdlib.h>#include<string.h>#include<math.h>#include<vector>#include<map>#include<set>#include<queue>#include<stack>#include<string>#include<algorithm>using namespace std;typedef long long ll;#define inf 0x7fffffffint a[12][300][2];int geshu[20];int b[50000][2];int c[2000][2];void init(){    int i,j;    ll len;    memset(geshu,0,sizeof(geshu));    for(len=4;len<=12;len++){        for(i=2;i<=500;i++){            ll num=i;            for(j=1;j<=len-1;j++){                num*=(i+j);            }            if(num>inf){                break;            }            geshu[len]++;            a[len][geshu[len] ][0]=num;            a[len][geshu[len] ][1]=i;        }    }}void init3(){    int i,j;    for(i=2;i<=1500;i++){        ll num=i*(i+1)*(i+2);        if(num>inf){            break;        }        geshu[3]++;        c[geshu[3] ][0]=num;        c[geshu[3] ][1]=i;    }}void init2(){    int i,j;    for(i=2;i<=47000;i++){        ll num=i*(i+1);        if(num>inf){            break;        }        geshu[2]++;        b[geshu[2] ][0]=num;        b[geshu[2] ][1]=i;    }}int main(){    int n,m,i,j,qidian,len1,len;    init();    init2();    init3();    while(scanf("%d",&n)!=EOF)    {        if(n<=1){            printf("0\n\n");            continue;        }        qidian=0;        len1=0;        for(len=11;len>=4;len--){            for(i=1;i<=geshu[len];i++){                if(n>=a[len][i][0] && n%a[len][i][0]==0){                    len1=len;                    qidian=a[len][i][1];                    break;                }            }            if(len1)break;        }        if(len1){            printf("%d\n",len1);            printf("%d",qidian);            for(i=1;i<len1;i++){                printf("*%d",qidian+i);            }            printf("\n");            continue;        }        qidian=0;        len1=0;        for(i=1;i<=geshu[3];i++){            if(n>=c[i][0] && n%c[i][0]==0){                len1=3;                qidian=c[i][1];                break;            }        }        if(len1==3){            printf("3\n");            printf("%d",qidian);            for(i=1;i<3;i++){                printf("*%d",qidian+i);            }            printf("\n");            continue;        }        qidian=0;        len1=0;        for(i=1;i<=geshu[2];i++){            if(n>=b[i][0] && n%b[i][0]==0){                len1=2;                qidian=b[i][1];                break;            }        }        if(len1==2){            printf("2\n");            printf("%d*%d\n",qidian,qidian+1);            continue;        }        printf("1\n");        int flag=0;        for(i=2;i<=sqrt(n);i++){            if(n%i==0){                flag=1;printf("%d\n",i);                break;            }        }        if(flag){            continue;        }        else printf("%d\n",n);    }    return 0;}


0 0
原创粉丝点击