原题: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; }