连续因子

来源:互联网 发布:北京九次方大数据公司 编辑:程序博客网 时间:2024/04/30 15:06

L1-6. 连续因子

时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
陈越

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

输入格式:

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

输出格式:

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

输入样例:
630
输出样例:
35*6*7

#include<stdio.h>#include<math.h>#include<string.h>int main(){    long long n,m;    scanf("%lld",&n);    long long int l,i;    l=sqrt(n);    for(i=2; i<=l; i++)    {        if(n%i==0)            break;    }    if(i>=l+1)    {        printf("1\n%lld\n",n);    }    else    {        long long int st,Q,cn,Max=0,k=2;        m=n;        cn=0;        st=2;        while(n)        {            for(i=k; ; i++)            {                if(m%i==0)                {                    cn++;                    m/=i;                }                else                {                    if(Max<cn)                    {                        Max=cn;                        Q=st;                    }                    break;                }            }            cn--;            if(cn==-1)            {                cn++;                st++;                k=st;            }            else            {                m*=st;                st++;                k=i;            }            if(k>=l+1)                break;        }        printf("%lld\n",Max);        for(i=Q; i<Q+Max; i++)        {            printf("%lld",i);            if(i!=Q+Max-1)                printf("*");        }        printf("\n");    }    return 0;}


1 0
原创粉丝点击