PTA 编程题(C语言)-- 连续因子

news2024/11/22 11:48:24

题目标题: 连续因子               题目作者 陈越 浙江大学

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

这道题目初看会觉得很难,仔细观察一下还是有思路的。首先对题目中的有关概念做以下解释。

所为连续因子序列是指,按照从小到大的次序排列的一串连续的正整数a、a+1、a+2 ...  a+n-1,若他们的乘机能够整除N,则称这串数是N的一个连续因子序列,其中正整数的个数n,叫做这个连续因子序列的长度。对于一个正整数N的连续因子序列,我们需要知道一下三点事实:

(1)N一定有连续因子序列。例如N本身就是一个长度为1的连续因子序列。

(2)N一定有一个最长连续因子序列。因为N是有限的,故他的连续因子序列不可能 无限长。

(3)N的最长连续因子序列可能不唯一,若N有若干的长度都是最长的连续因子序列,则这个因子序列中起始因子最小的序列,称为最小的连续因子序列。

本题就是要在N的最长因子序列中寻找最小的。

思路:对于一个给定的i,我们用里层循环找到从i开始的最长因子序列;用外层循环让i从2开始遍历到N,如果新找的到的因子序列比之前找到的长,我们用新找到的去更换当前最长续因子序列;由于我们每次找的最长因子序列的起始因子是从2开始递增的,故找到的最长因子序列一定是最小的。

注意:外循环的循环变量i是遍历起始因子的,所以i从2开始遍历。至于i到哪里结束呢?如果N是素数,则我们需要让i能取到N,但是这样会有一个测试点运行超时。如果N不是素数,我们只需要让i取到sqrt(N)即可,这样也不会超时。所以我们的处理办法是,就让i取到sqrt(N),如果没有找到最小因子序列,则说明N一定是素数,就按素数的情况输出即可。

另外,我们用来存放因子序列的数组的长度设置为12就可以了,因为13!将超过给定的正整数N的上限,也就是说对于题目给定的N,它的最长因子序列不可能超过12。

代:1:

#include <stdio.h>
#include <math.h> 
int main () {
    int N, M, i, j, lenS = 0, lenT = 0, S[12] = {0},T[12] = {0};
    scanf("%d", &N);
    for (i = 2; i <= sqrt(N); i++) {
        M = 1;
        for (j = 0; j < 12; j++) {
            M *= (i+j);
            if (N%M == 0) {
                T[j] = i+j;
                lenT = j+1;
            } 
            else break;
        }
        if (lenT > lenS) {  // 如果新找的的连续因子序列T比S长,我们就用T替换S
            for (j = 0; j < lenT; j++) {
                S[j] = T[j];
            }
            lenS = lenT;
        }
    }
    if (lenS == 0) {   // 没有找长度大于1的连续因子序列的情况,说明N是素数。
        printf("1\n%d",N);
    } else {
        printf("%d\n", lenS);
        for (i = 0; i < lenS-1; i++) printf("%d*", S[i]);
        printf("%d",S[i]);  
    }
    return 0;
}

优化:因为要记录一个连续因子,起始只需要记录它的其实因子和长度就可以了,没有必要用数组记录下整个因子序列,基于这个想法我们有如下的优化

代码2:

#include <stdio.h>
#include <math.h> 
int main () {
    int N, M, i, j, lenS = 0, lenT, S = 0, T = 0;
    scanf("%d", &N);
    for (i = 2; i <= sqrt(N); i++) {
        M = 1;
        T = i;
        for (j = 0; j < 12; j++) {
            M *= (i+j);
            if (N%M == 0) {
                lenT = j+1;
            } 
            else break;
        }
        if (lenT > lenS) {
            S = T;
            lenS = lenT;
        }
    }
    if (lenS == 0) {
        printf("1\n%d",N);
    } else {
        printf("%d\n", lenS);
        for (i = 0; i < lenS-1; i++) printf("%d*", S+i);
        printf("%d",S+i);  
    }
    return 0;
}

  更多PTA题目的的参考代码,可以在wx小程序里搜“PTA刷题助手”,或扫下面的二维码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1180372.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

虚拟数字人引领企业创新浪潮

在人工智能和计算机图形学快速发展的今天&#xff0c;虚拟数字人正逐渐成为企业形象展示的新趋势。作为一种融合了多种技术的数字化形象&#xff0c;虚拟数字人具有逼真的外观、情感表达和思维逻辑&#xff0c;能够与人类进行自然、流畅的互动&#xff0c;为企业提供全天候、个…

【uniapp+vue3/vue2】ksp-cropper高性能图片裁剪工具,详解

效果图&#xff1a; 1、ksp-cropper是hbuilder插件市场中的一款插件&#xff0c;兼容vue2和vue3 ksp-cropper插件安装地址&#xff0c;直接点击跳转 2、插件用法相对简单 &#xff08;1&#xff09;只要url有值就会显示插件&#xff0c;为空就会隐藏插件 &#xff08;2&#…

FineReport----报表模板入门

FineReport----报表模板入门教程1 FineReport就一款类Excel操作界面的报表工具&#xff0c;通过拖拖拽拽简单实现报表制作&#xff0c;实现数据展示、数据查询、数据录入功能&#xff0c;并且支持图形多样化展示。 一、入门小例子 1. 打开设计器 启动FineReport设计器&…

Window 11中安装Rust编译环境和集成开发环境

https://blog.csdn.net/weixin_43882409/article/details/87616268是我参考的一篇文章。 下载 先到https://www.rust-lang.org/learn/get-started&#xff0c;下载64-Bit&#xff08;64位&#xff09;的rustup-init.exe文件。 使用其他方式进行安装的网址https://forge.rust…

视频特效编辑软件 After Effects 2022 mac中文版介绍 (ae 2022)

After Effects 2022 mac是一款视频特效编辑软件&#xff0c;被称为AE&#xff0c;拥有强大的特效工具&#xff0c;旋转&#xff0c;用于2D和3D合成、动画制作和视觉特效等&#xff0c;效果创建电影级影片字幕、片头和过渡&#xff0c;是一款可以帮助您高效且精确地创建无数种引…

初识面向对象(类和对象)

目录 1. 面向对象的初步认知 2.面向对象与面向过程 3.类定义和使用 4.类的定义格式 练习 5.类的实例化 什么是实例化 6.this引用 为什么要有this引用 什么是this引用 this引用的特性 7.对象的初始化 默认初始化 就地初始化 使用构造方法初始化 1. 面向对象的初步…

大数据毕业设计选题推荐-营业厅营业效能监控平台-Hadoop-Spark-Hive

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

Logstash与FileBeat详解以及ELK整合详解

背景 日志管理的挑战&#xff1a; 关注点很多&#xff0c;任何一个点都有可能引起问题日志分散在很多机器&#xff0c;出了问题时&#xff0c;才发现日志被删了很多运维人员是消防员&#xff0c;哪里有问题去哪里 集中化日志管理思路&#xff1a; 日志收集》格式化分析》检索…

一种以RGB颜色登录的密码实现

当用户点击了某些密码之后&#xff0c;就可以登录成功&#xff0c;主要用于安全码&#xff0c;辅助安全手段。 颜色密码虽然不方便用键盘输入&#xff0c;只能用鼠标点击&#xff0c;但是容易记忆&#xff0c;也不容易被黑客攻陷。

PC9502双节锂电池充电管理芯片高精度外围元件少SOP8封装

■ 产品概述 PC9502 系列是一款双节锂电池充电管理芯片。 该芯片 包含了充电状态检测、充电过程、温度检测等&#xff0c;内部还集成 一个高精度的基准电压模块&#xff0c;此芯片采用 SOP-8 封装。 PC9502 充电包含三种模式&#xff1a;预充电&#xff0c;恒流充电&#x…

【REST API】什么是REST API?

参考&#xff1a; 什么是 REST API 一文读懂 (RESTful API)_哔哩哔哩_bilibili -------------------------------------------------------------------------------------------------------------------------------- REST API&#xff0c;又被称作RESTful API&#xff0c…

国内私募机构出海或成趋势?| A+CLUB深圳沙龙圆桌论坛

上篇国君国际、华锐技术、亚马逊云科技和彭博的四位专家对私募出海涉及到的业务和技术领域做了专业分享&#xff0c;本篇将为大家带来干货满满的圆桌论坛内容。此次圆桌由华锐技术机构业务总监-葛云娟主持&#xff0c;国君国际跨境业务销售主管-毛哲、清华大学教授-林健武、衍盛…

微服务之Nacos配置管理

文章目录 一、统一配置管理Nacos操作二、统一配置管理java操作1.引入依赖2.创建配置文件3.测试4.总结 三、Nacos配置自动更新1.添加注解RefreshScope2.使用ConfigurationProperties注解3.总结 四、Nacos多环境配置共享1.配置文件2.多种配置的优先级3.总结 一、统一配置管理Naco…

Spire.Office for .NET 8.10.2 同步更新-Crk

Spire.Office for .NET是 E-iceblue 提供的企业级 Office .NET API 的组合。它包括Spire.Doc、Spire.XLS、Spire.Spreadsheet、Spire.Presentation、Spire.PDF、Spire.DataExport、Spire.OfficeViewer、Spire.PDFViewer、Spire.DocViewer、Spire.Barcode和Spire.Email。Spire.O…

二.831(KMP)字符串详解

ne[3]枚举2次 ne[4],枚举3次 ne[5],枚举4次]b在后面了,就一个b就不可能在前面了]b舍弃 ne[6],枚举i-1次]一眼看最长相等前后缀,就是aab,aab ne[7],aaba,aaba ne[8],枚举i-1次]aabaa,aabaa 同理 怎么快速看呢!我想把b给夹起来]把中间夹的数越多就多 其实 加的有规律,最…

移动硬盘无法识别怎么办?有哪些免费的读写硬盘工具

在日常生活中&#xff0c;我们都习惯于把移动硬盘作为常用的存储介质&#xff0c;用来储存一些文档资料。那么&#xff0c;如果遇上硬盘无法读取的问题&#xff0c;我们又该如何是好呢&#xff1f; 其实硬盘无法读取的问题还是比较常见的&#xff0c;通常有以下几种处理方法&a…

QT 实现两款自定义的温度计/湿度控件

文章目录 0 引入1、带有标尺的温度/湿度计控件1.头文件2.核心代码 2、竖起来的温度/湿度计控件1.头文件2.实现 3、引用 0 引入 QT原生控件没有实现如仪表盘或者温度计的控件&#xff0c;只好自己实现&#xff0c;文章代码部分参考引用的文章。直接上图 图一 带有标尺的温度计…

unity打AB包,AssetBundle预制体与图集(二)

第二步&#xff1a;加载AB包的资源&#xff0c;用于显示 using System.Collections; using System.Collections.Generic; using System.IO; using UnityEngine; using UnityEngine.Networking; using UnityEngine.U2D; using UnityEngine.UI;public class GameLaunch : MonoBe…

B - Little Tiger vs. Deep Monkey

思路&#xff1a; &#xff08;1&#xff09;条件&#xff1a;n道单选题&#xff0c;分值不一定相同&#xff0c;选对或者错&#xff0c;A,B分别做题&#xff0c;得分多者胜&#xff1b; &#xff08;2&#xff09;问题&#xff1a;A至少做对几道题才能保证获胜概率达到50%&a…

web前端js基础------制作滚动图片

1&#xff0c;要求 通过定时器使其出现滚动的效果 可以通过按键控制图片滚动的方向&#xff08;设置两个按钮绑定点击事件&#xff09; 当鼠标悬停时图片停止&#xff0c;鼠标离开时图片继续向前滚动&#xff08;可以设置鼠标的悬停和离开事件&#xff09; 参考如下 conten…