首页 > 其他 > 详细

L1-6 连续因子 (新的开始

时间:2018-01-29 22:59:09      阅读:201      评论:0      收藏:0      [点我收藏+]

一个正整数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

解题思路:

通过12! < 231 可知最多连续不超过12个数,之后由于小的连续序列一定更长,从最长最小的可能序列开始暴力枚举

 1 #include<cstdio>
 2 
 3 int main(void)
 4 {
 5     int n;
 6     scanf("%d", &n);
 7     
 8     int i = 2;
 9     while(n % i != 0){
10         i++;
11     }
12     int m = n / i, max = 0;
13     
14     int len, st, first = 1;
15     for(int i = 2; i < m; i++){
16         int j = i + 1, sum = i;
17         while(sum < n){
18             sum *= j;
19             j++;
20         }
21         if(sum == n && first){
22             st = i; len = j - 1;
23             first = 0;
24         }
25         else if(sum == n){
26             if(j - i > max) max = j - i;
27         }
28     }
29     
30     printf("%d\n", max);
31     first = 1;
32     for(int k = st; k <= len; k++){
33         if(first){
34             printf("%d", k); first = 0;
35         } 
36         else printf("*%d", k);
37     }
38     
39     return 0;
40 }

 

L1-6 连续因子 (新的开始

原文:https://www.cnblogs.com/fatcatm/p/8379622.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!