L1-006. 连续因子

原创 2018年04月16日 14:29:57

一个正整数N的因子中可能存在若干连续的数字。例如630可以分解为3*5*6*7,其中5、6、7就是3个连续的数字。给定任一正整数N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列。
输入格式:
输入在一行中给出一个正整数N(N在1到2的31次方之间)
输出格式:
首先在第1行输出最长连续因子的个数;然后在第2行中按“因子1*因子2*……*因子k”的格式输出最小的连续因子序列,其中因子按递增顺序输出,1不算在内。
输入样例:
630
输出样例:
3
5*6*7
Note:怎么找出因子,就需要不停的从1取余到sqrt(N)为止,再进而找出是否有连续的且输出最小还得统计因子的个数。可以利用两个循环,第一个标记连续因子序列首数,第二个用来求序列首数后的序列。最后一个循环输出这个序列。所以在不停的比较当中,需要设置变量current_head和current_longest分别记录序列首和序列长度。最后用for循环输出这个序列,问题就得到解决了。关键在于要理清之间两个循环之间的关系,以及设置条件来判断是否为最小最长连续因子序列。

#include<stdio.h>
#include<math.h>
int isprime(int N)
{
    int i;
    for (i=2; i<sqrt(N)+2; i++){
        if (N%i==0) return 0;
    }return 1;
}
int main()
{
    int N, M, i, j, k, count, current_longest=0, current_head;
    scanf("%d", &N);
    if (isprime(N)) printf("1\n%d", N);//判断是否为质数,是的话不走循环直接输出
    else{
        for (i=2; i<sqrt(N)+2; i++){//严格意义上讲需要循环到<sqrt(N)+2,实际上到sqrt(N)就行了
            count = 0;//每一次循环都要对count初始化
            M = N;//循环后M的值变了,所以也需要重新赋值
            for (j=i; j<sqrt(N)+2; j++){
                if (M%j==0){
                    count ++;//标记长度
                    M /= j;//标记序列首
                }else{
                    if(count>current_longest){//最小输出序列
                        current_longest = count;//记录序列长度
                        current_head = i;//记录序列守
                    }
                    break;//跳出第二个for循环
                }
            }
        }
        printf("%d\n", current_longest);//输出序列长度
        for (k=current_head; k<current_head+current_longest; k++){
            printf("%d", k);
            if (k!=current_head+current_longest-1) putchar('*');//注意最后一个是长度减一
        }
    }
    return 0;
}
版权声明: https://blog.csdn.net/qq_37701948/article/details/79960225

PAT-天梯赛练习集-L1-006-连续因子

ACM模版描述题解最开始看错题了,结果想岔了,用尺取法做了,但是不是说尺取法不能做,只是没必要用它,直接用数组存起来所有的因子即可,当然,也可以存一部分因子,毕竟这个结果只和前部分因子以及它本身有关。...
  • f_zyj
  • f_zyj
  • 2017-03-21 00:49:31
  • 384

L1-006. 连续因子(枚举因子)

题目链接:https://www.patest.cn/contests/gplt/L1-006 思路分析:首先可以想到以O(sqrt(n))的复杂度求出所有因子。然后排序,这样问题就转化为求一个数组...
  • u013615904
  • u013615904
  • 2016-05-16 10:58:33
  • 4488

PATL1-006 连续因子

这道题复杂度够直接暴力就好了 AC代码: /* *********************************************** Author :yzkAccepted...
  • sinat_30126425
  • sinat_30126425
  • 2016-07-10 19:15:03
  • 472

L1-006. 连续因子(C++)

首先,感谢这位大神的博客,长时间地部分正确让人头疼……还好找到了可以AC的代码。下面的代码是稍稍改动这位大神的,也可以ac的代码。本人脑袋比较笨,所以强行加了很多注释,有误之处,希望看到这篇博文的小伙...
  • hengbao4
  • hengbao4
  • 2016-05-27 17:34:17
  • 1796

cccc L1-006. 连续因子

点击打开链接 T1 的题咯我好久,一直有一个点过不去,也没找到怎么错的!!。。 第一次写, 首先判素, 如果素数,直接输出。 如果不是素数,开始枚举。 卡到...
  • zoro_n
  • zoro_n
  • 2017-03-26 23:21:18
  • 139

CCCC/GPLT L1-006 连续因子

题目重现 一个正整数N的因子中可能存在若干连续的数字。例如630可以分解为3*5*6*7,其中5、6、7就是3个连续的数字。给定任一正整数N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子...
  • zccz14
  • zccz14
  • 2016-07-12 11:47:36
  • 349

团体程序设计天梯赛-练习集 L1-006. 连续因子 JAVA

import java.util.Scanner; class Main{ public static void main(String[] args) { Scanner sc = new ...
  • SZStudy
  • SZStudy
  • 2017-05-14 22:58:03
  • 235

Java 连续因子

L1-006. 连续因子一个正整数N的因子中可能存在若干连续的数字。例如630可以分解为3*5*6*7,其中5、6、7就是3个连续的数字。给定任一正整数N,要求编写程序求出最长连续因子的个数,并输出最...
  • qq_41242645
  • qq_41242645
  • 2018-02-16 19:44:15
  • 108

L1-006. 连续因子-PAT团体程序设计天梯赛

L1-006. 连续因子 一个正整数N的因子中可能存在若干连续的数字。例如630可以分解为3*5*6*7,其中5、6、7就是3个连续的数字。给定任一正整数N,要求编写程序求出最长连续因子的个数,...
  • liuchuo
  • liuchuo
  • 2016-07-21 23:26:34
  • 3216

PAT L1-6. 连续因子 (暴力)

题目链接:https://www.patest.cn/contests/gplt/L1-6 L1-6. 连续因子 时间限制 400 ms 内存限...
  • Strokess
  • Strokess
  • 2016-05-07 16:43:38
  • 2186
收藏助手
不良信息举报
您举报文章:L1-006. 连续因子
举报原因:
原因补充:

(最多只允许输入30个字)