//暴力求解
//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;
}
L1-006. 连续因子
最新推荐文章于 2018-11-21 13:51:04 发布