L1-006.连续因子

一个正整数N的因子中可能存在若干连续的数字。例如630可以分解为3*5*6*7,其中5、6、7就是3个连续的数字。给定任一正整数N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列。

输入格式:

输入在一行中给出一个正整数N(1<N<231)。

输出格式:

首先在第1行输出最长连续因子的个数;然后在第2行中按“因子1*因子2*……*因子k”的格式输出最小的连续因子序列,其中因子按递增顺序输出,1不算在内。

输入样例:

630

输出样例:

3
5*6*7
#include<stdio.h>
#include<math.h>
int main() {
    int num;
    int a[100000]= {0};
    int i,j,max=0,x,y,q,m=1;
    scanf("%d",&num);
    q=(int)(sqrt(num));
    for(i=2; i<=q; i++) {
        x=i;
        y=i;
        while(num%x==0) {
            a[i]++;
            y++;
            x=x*y;
        }
    }
//    for(i=2;i<q;i++) printf("%d ",a[i]);
    for(i=2; i<=q; i++) {
        if(a[i]>max) {
            max=a[i];
            m=i;
        }
    }
    if(a[m]<1){
        printf("%d\n%d",1,num);
    }else{
        printf("%d\n",a[m]);
    x=m;
    y=m;
    while(num%x==0) {
        y++;
        x=x*y;
        if(y-1==1){
            printf("%d",num);
        }else{
            printf("%d",y-1);
        }
        if(num%x==0){
            printf("*");
        }
    }
    }
    
    return 0;
}

 

posted @ 2017-05-10 16:35  与你若只如初见  阅读(165)  评论(0编辑  收藏  举报