这一题直接枚举应该是没有问题,但是容易超时,即使我将为质数直接判断输出也会超时,再加上还有一个测试点错误,没找出来,提醒一点,在进行枚举连续因子时需要判断是否大于n,如果是则应直接否掉,本题以后再更~
#include <iostream>
#include <algorithm>
using namespace std;
int n, nn, a[1024], b[1024], ans = 1, cnt = 0, sum;
int Isp(int n)
{
for(int i = 2; i <= n / 2; ++i) if(n % i == 0) return 1;
return 0;
}
int main()
{
scanf("%d", &n);
/* if(!Isp(n))
{
printf("1\n");
printf("%d\n", n);
return 0;
}
*/
if(n >= 4 && Isp(n)) nn = n / 2;
else nn = n;
for(int m = nn; m >= 2; --m)
{
if(n % m == 0)
{
a[cnt++] = m;
sum = m;
for(int k = m - 1; k >= 2; --k)
{
if(n % k == 0)
{
sum *= k;
a[cnt++] = k;
}
else break;
}
}
if(cnt >= ans && sum <= n)
{
ans = cnt;
for(int i = 0; i < cnt; ++i) b[i] = a[i];
}
cnt = sum = 0;
}
printf("%d\n", ans);
for(int i = ans - 1; i >= 0; --i)
{
printf("%d", b[i]);
if(i != 0) putchar('*');
}
return 0;
}