题目描述

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

解析:

这道题我们有个需要注意的地方

  1. 答案要求输出最长连续因子序列
  2. 若有两个相同长度的连续因子序列,要求输出最小的连续因子序列
  3. 还有一个隐含条件就是题目给出的例子是630=3×5×6×7,也就是说你的连续因子序列的乘积也要整除N。
  4. 1不算在内
    于是,我就开始了我的想法,若要找到因子,那么总体上可分为两种情况:
    一种是N为质数:
    那么最后输出的序列只能是N本身;
    那么我们只需从2到根号下N来不断整除N
    若能够整除
    再判断是否是连续的因子,若是连续因子则更新当前序列长度及序列最后一个因子的值并将i累乘到current(要保证current不大于N),若不是连续因子则仅更新current为i
    若不能够整除则不做任何操作
    然后再判断当前序列长度是否大于当前最长序列,若大于则更新当前最长序列
    最后输出结果
//我首次提交的代码如下(C++)
#include<iostream>
using namespace std;
int main()
{// 虽然这道题最大数据在2^31,但是实际测试数据用int不够long int N,current=1,time=1,last=0,maxtime=1,maxlast=0;cin >> N; for(int i=2;current*i<=N;i++){// 判断i是否为连续因子,1不算在内if(N%i==0&&N%(i-1)==0&&i!=2){//current记录当前连续因子序列乘积,但没有加判断 current*=i;// 遇到连续因子更新序列长度 time++; // 更新当前序列最后一个因子last=i; }else{// 若不是连续因子则current重置为icurrent=i;//序列长度重置为1 time=1; if(N%i==0)// 更新当前子序列最后一个因子last=i;         }// 更新当前最长子序列长度if(maxtime<time){ maxtime=time; // 这一步判断其实duck不必if(maxlast<last) maxlast=last;}}cout << maxtime << endl;// 加一步判断num是否为质数cout << (maxtime==1?N:maxlast-maxtime+1); for(int i=maxlast-maxtime+2;i<=maxlast;i++)cout << '*' << i;return 0;
}

错误发现

  1. 对于60这一测试数据,忽视了最长连续子序列长度仍为N的因子,因此最长子序列不是2×3×4而是3×4×5
  2. 对于899这一测试数据,其因子为1、29、31、899,其最长连续因子应为29,若用上述代码提交由于maxtime初始化即为1,因此即使找到29,time置为1也不会更新maxtime,会将其当作质数进行输出

问题解决

#include<iostream>
using namespace std;
int main()
{unsigned int N; // 也可以用long intcin >> N;// 该解法中定义的变量意义与上面的错误解法想同,但这里将maxtime和maxlast的初始化值都定义为了1就可以解决在根号下N范围内只有一个因子的情况unsigned int current=1,last=0,time=0,maxlast=0,maxtime=0;for(unsigned int i=2;i*i<=N;i++){// 在这里较上面的解法做出了简化,易知若i和i-1是满足题目条件的因子那么他们的乘积一定能整除Nif(N%(i*(i-1))==0&&i!=2){ // 这里加入了对current的判断,只有当current是N的因子时才可更新下面这三个变量的值if(N%(current*i)==0){ current*=i;last=i;time++;}}else{// 如果N可被i整除则记录i,否则不做任何操作if(N%i==0){current=i;// 注意此时对于899=28*31这样的数据,maxtime为0,因此可以更新maxtime和maxlast的值time=1;last=i;}}if(maxtime<time){maxtime=time;maxlast=last;}}// 对于质数的处理if(maxtime==0){maxtime=1;maxlast=N;}cout << maxtime << endl << maxlast-maxtime+1;for(unsigned int i=2;i<=maxtime;i++)cout << "*" << maxlast-maxtime+i;return 0;
}

注:

此外还有一种双重循环不断找未出现的连续因子的方法,代码比我的更加简洁,大家可以去学习一下。
链接:柳婼のblog L1-006. 连续因子-PAT团体程序设计天梯赛

PTA天梯赛 L1-006.连续因子相关推荐

  1. PTA天梯赛L1刷题总结(三)15分题型(超详细题解)

    多么感人!时隔一年多,我终于来更新15分题型的博文了.突然发现L1的题目量扩充了!一共有哦20道题.哎~都写一遍题解好了.在这里推荐下胡凡的算法笔记!在基础算法和数据结构上给了我很多细致的讲解启发.过 ...

  2. PTA 天梯赛L1 7-3 跳一跳 (15 分) C语言AC题解【仅供分享】

    微信小程序中的跳一跳相信大家都玩过.emmm???只学习不玩游戏?那就吃亏了-好好读题理解吧. 简化后的跳一跳规则如下:玩家每次从当前方块跳到下一个方块,如果没有跳到下一个方块上则游戏结束. 如果跳到 ...

  3. 天梯赛L1难度总结 + 题目难易分类

    天梯赛L1难度总结 一个月的时间,从 2 月 6 号的<L1-001 Hello World (5 分)>到 3 月 8 号的<L1-080 乘法口诀数列 (20 分)>,一个 ...

  4. 【PTA天梯赛练习题目2】

    pta天梯赛练习题目 考试座位号 每个 PAT 考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位.正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的 ...

  5. 2021/4/24团队设计天梯赛L1题目集及题解

    2021/4/24团队设计天梯赛L1题目集及题解: 以下题解都是通过PTA测试的,大致保证正确性: 查看题目戳此::PTA题目集 L1题目集 L1-01 人与神(5分) L1-02 #两小时学完C语言 ...

  6. pta天梯赛 非常弹得球

    pta天梯赛 7-2 非常弹的球 刚上高一的森森为了学好物理,买了一个"非常弹"的球.虽然说是非常弹的球,其实也就是一般的弹力球而已.森森玩了一会儿弹力球后突然想到,假如他在地上用 ...

  7. PTA天梯赛L1-006 连续因子 (20分)

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

  8. 『ACM C++』 PTA 天梯赛练习集L1 | 048-49

    今日刷题048-049 ------------------------------------------------L1-048---------------------------------- ...

  9. 【PTA~21年GPLT团体程序天梯赛-L1题】

    文章目录 L1-01 人与神~5 题解 L1-02 两小时学完C语言~5 题解 L1-03 强迫症~10 题解 L1-04 降价提醒机器人~10 题解 L1-05 大笨钟的心情~15 题解 L1-06 ...

最新文章

  1. aes离线解密工具_CTF常用工具、网站、练习平台
  2. gin使用自定义结构绑定表单数据
  3. OCP12C题库,71sql的使用
  4. c语言指针写鞍点,c语言——鞍点
  5. java中==与equal()的区别
  6. 【短时能量】基于matlab语音信号短时能量【含Matlab源码 1719期】
  7. Photoshop插件--删除暗调通道--脚本开发--PS插件
  8. 收集五款常用的HTML编辑软件
  9. 猿创征文|深度学习基于ResNet18网络完成图像分类
  10. 系统环境变量 注册表键值
  11. 小学-知识与能力【5】
  12. windy定义了一种windy数,不含前导零且前两个数字只差至少为2的正整数被称为windy数,求A和B之间windy数的个数
  13. 简单几行代码带你爬取王者荣耀皮肤
  14. VUE_v-lazy懒加载
  15. Windows文件管理器异常无响应,访问共享文件导致无响应的处理办法
  16. 关于MediaCode播放H265/hevc的总结
  17. 计算成绩平均分浮点数c语言,C实验四
  18. Check官方使用教程——翻译
  19. 拉卡拉支付助力企业数字化转型
  20. 一个简单的Java测试类型服务器

热门文章

  1. 未来高清显示器发展新趋势及代表技术解析
  2. MangoDB安装教程
  3. MATLAB实现RSA加密解密
  4. iOS 源生推送和极光推送
  5. 9月20日重磅发布:中国云计算创新企业50强|榜单征集
  6. 关于esp8266的D0、D3、D4口的使用
  7. GSEA基因基富集分析
  8. 数据分析思维与方法总结
  9. oracle sqlplus 的四种连接方式
  10. 2023年 ChatGPT 研究报告