原题:1096. Consecutive Factors (20)
解题思路:
最暴力的方法是一个一个去除,不过实际上只要算前开方个数即可。
被中间一个溢出卡了最后一个样例,最后把i*i转成long long才得以解决。
代码如下:
#include<cstdio>
#include<algorithm>
using namespace std;
int main()
{
int n;
while(scanf("%d", &n) == 1)
{
int start, len = 0;
for(int i = 2; (long long)i*i <= n; i++)
{
int tmp = n;
int nowlen = 0;
for(int j = i; j <= tmp; j++)
{
if(tmp % j) break;
tmp /= j;
nowlen++;
}
if(nowlen > len)
{
len = nowlen;
start = i;
}
}
if(len)
{
printf("%d\n", len);
for(int i = 0; i < len; i++)
{
if(i) printf("*%d", start+i);
else printf("%d", start+i);
}
}
else
printf("1\n%d", n);
printf("\n");
}
return 0;
}