L1-006. 连续因子

来源:互联网 发布:盗墓笔记网络大电影 编辑:程序博客网 时间:2024/06/08 04:20
//暴力求解//12! < 2^31 < 13!//限定的最长连续因子的个数为12//若长度比1大,至少两个相邻的数相乘,这两个数的乘积是不可能超过N//x(x+1)<=N 即若不止一个因子相乘时,所求连续因子序列第一个数不可能超过sqrt(N)#include <iostream>#include <cmath>using namespace std;int main(){    int N,M,len,x;    cin>>N;    M=(int)sqrt(N+0.0);    //从限定的最大长度12开始求解,一旦成功即为对应的最长连续因子的个数    for(len=12;len>0;len--)    {        for(x=2;x<=M;x++)        {            int k1=x,k2=x;            long long int ans=1;            for(int i=1;i<=len;i++)            {                ans*=k1;                k1++;            }            if(N%ans==0)            {                cout<<len<<endl<<k2;                k2++;                while(k2<k1)//while(len>0)错误!len已输出                {                    cout<<"*"<<k2;                    k2++;                }                return 0;            }        }    }    cout<<"1"<<endl<<N<<endl;//若是质数,输出原数    return 0;}

详细讲解链接
原创粉丝点击