题目:
一个正整数N的因子中可能存在若干连续的数字。例如630可以分解为3*5*6*7,其中5、6、7就是3个连续的数字。给定任一正整数N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列。
输入格式:
输入在一行中给出一个正整数N(1<N<231)。
输出格式:
首先在第1行输出最长连续因子的个数;然后在第2行中按“因子1*因子2*……*因子k”的格式输出最小的连续因子序列,其中因子按递增顺序输出,1不算在内。
输入样例:630输出样例:
3 5*6*7
思路:一开始觉得好难,后来想到了阶乘,2的31次方小于13的阶乘,所以不难推出最高的连续子序列长度肯定小于13,就从长度12开始暴力破解,而且不难知道因子最大值为sqrt(n);代码如下:#include<iostream> #include<algorithm> #include<cmath> int n; using namespace std; int main() { cin >> n; int max_num = sqrt(n); for(int len = 12;len >=1 ;len--) { for(int begin = 2;begin <= max_num;begin++) { long long int ans = 1; int end; for(end = begin;end - begin <= len-1;end++) { ans*=end; } if(n%ans == 0) { cout << len << endl; int i; for(i = begin;i-begin<=len-2;i++) { cout << i << "*"; } cout << i; return 0; } } } cout << 1 << endl << n; return 0; }