L1-006 连续因子 (20 分)

题目链接

一个正整数 N 的因子中可能存在若干连续的数字。例如 630 可以分解为 3×5×6×7,其中 5、6、7 就是 3 个连续的数字。给定任一正整数 N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列。

输入格式:

输入在一行中给出一个正整数 N(1)。

输出格式:

首先在第 1 行输出最长连续因子的个数;然后在第 2 行中按 因子1*因子2*……*因子k的格式输出最小的连续因子序列,其中因子按递增顺序输出,1 不算在内。

输入样例:

630

输出样例:

3
5*6*7

 

 1 #include<algorithm>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<cstdio>
 5 #include<cmath>
 6 using namespace std;
 7 int main(){
 8     long long n,t;
 9     scanf("%lld",&n);
10     for(int i = 11;i >= 1;i--){
11         for(int j = 2;j <= sqrt(n);j++){
12             t = 1;
13             for(int k = 1;k <= i;k++){
14                 t *= (j + k - 1);
15             }
16             if(n % t == 0){
17                 printf("%d\n",i);
18                 for(int k = 1;k <= i;k++){
19                     if(k == 1){
20                         printf("%d",j + k - 1);
21                     }
22                     else{
23                         printf("*%d",j + k - 1);
24                     }
25                 }
26                 printf("\n");
27                 return 0;
28             }
29         }
30     }
31     printf("1\n%lld\n",n);
32     return 0;
33 }
View Code

 

posted @ 2018-12-30 15:54  永不&言弃  阅读(616)  评论(0)    收藏  举报