一、题目
![](https://i-blog.csdnimg.cn/blog_migrate/add1d9e6f8a4041f13bf60e189e4f19b.png)
二、解题思路
- 判断是否是质数,如果是,则直接输出;
- 否则找出最长连续因子。
- 找最长连续因子:遍历并记录此时最长连续因子的个数(如果之后的连续因子个数比这个大,则修改)、起始值(以便最后输出)、因子乘积(连续因子的乘积必须也是因子)。
![](https://i-blog.csdnimg.cn/blog_migrate/a17cabec3fa89025da66f6fbf0c68679.png)
三、代码
#include<iostream>
using namespace std;
#include<cmath>
//函数的声明
bool prime(int x);
int main()
{
int n,cotx=0,coty=0,start;
cin>>n;
if(prime(n))
{
cout<<"1"<<endl<<n;
return 0;
}
for(int i=2;i<=n;i++)
{
if(n%i==0)
{
coty=1;
int sum=i;
for(int j=i+1;j<=n;j++)
{
if(n%j==0 && (n%(sum*j)==0))
{
coty++;
sum*=j;
}
else
{
break;
}
}
}
if(coty>cotx)
{
cotx=coty;
start=i;
}
}
cout<<cotx<<endl<<start;
for(int i=start+1;i<start+cotx;i++)
{
cout<<"*"<<i;
}
return 0;
}
//判断是否是质数
bool prime(int x)
{
for(int i=2;i<=sqrt(x);i++)
{
if(x%i==0)
{
return false;
}
}
return true;
}
四、总结
- 连续因子的乘积必须也是因子,例如 12 的最长连续因子是 2*3 ,因为 2*3*4=24 ,12%24 != 0 。
- 如果是质数,直接输出,如果遍历判断会运行超时。
- 有些变量需要赋初值。