L1-006 连续因子(简单模拟)
一个正整数 $N$ 的因子中可能存在若干连续的数字。例如 630 可以分解为 3×5×6×7,其中 5、6、7 就是 3 个连续的数字。给定任一正整数 $N$,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列。
输入格式:
输入在一行中给出一个正整数 ${N(1<N<2^{31})}$。
输出格式:
首先在第 1 行输出最长连续因子的个数;然后在第 2 行中按 因子1*因子2*……*因子k
的格式输出最小的连续因子序列,其中因子按递增顺序输出,1 不算在内。
输入样例:
输出样例:
思路:
在第二层循环,如果不连续就跳出循环,和最大值比较,如果比最大值大,则替换最大值并记录下标。
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| #include <bits/stdc++.h> using namespace std;
int N, num = 0, mx = -1, pos;
int main() { cin >> N; num = N; for(int i = 2; i <= sqrt(N); i++) { int cnt = 0; num = N; for(int j = i; j <= sqrt(N); j++) { if(num % j == 0) { num = num / j; cnt++; } else break; } if(cnt > mx) { mx = cnt; pos = i; } } if(mx <= 0) { cout << "1" << endl << N; } else { cout << mx << endl; cout << pos; for(int i = pos+1; i <= pos+mx-1; i++) cout << "*" << i; }
return 0; }
|