参考 https://www.liuchuo.net/archives/2110。
思路:一个数的因数大于sqrt(n)的数只能有一个,且其余因数都小于sqrt(n)。故当一个数的因数有两个及以上时,最大上限不超过sqrt(n)+1。由于是连乘的,所以只要记录第一个数first和长度max即可
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int n;
while(cin >> n)
{
int up = sqrt(double(n))+1;
int first = 0, max = 0;
int i, j;
for(i = 2; i <= up; i++)
{
int tmp = 1; //用来保存连乘的积
for(j = i; j <= up; j++)
{
tmp *= j;
if(n % tmp)
break;
}
//如果长度比原来的大就更新
if(j - i > max)
{
max = j - i;
first = i;
}
}
if(first == 0) //素数
{
cout << 1 << endl;
cout << n << endl;
}
else
{
cout << max << endl;
for(int i = 0; i < max; i++)
if(i == 0)
cout << first+i;
else
cout <<"*" << first+i;
cout << endl;
}
}
return 0;
}