信息学奥赛初赛天天练-47-CSP-J2020完善程序1-质数、因数、质因数、质因数分解算法、质因数分解算法优化

PDF文档公众号回复关键字:20240727

在这里插入图片描述

2020 CSP-J 完善程序1

1 完善程序 (单选题 ,每小题3分,共30分)

质因数分解给出正整数 n,请输出将 n 质因数分解的结果,结果从小到大输出

例如:输入 n=120,程序应该输出 2 2 2 3 5,表示:120 = 2 ×2 ×2 ×3 ×5

输入保证2<=n<=10^9

提示:先从小到大枚举变量 i,然后用 i 不停试除 n来寻找所有的质因子

01 #include <cstdio>
02 using namespace std;
03 int n, i;
04 int main() {
05   scanf("%d", &n);
06  for(i = ①;② <=n;i ++){
07     ③{
08       printf("%d ", i);
09       n = n / i;
10    }
11  }
12  if(④)
13    printf("%d ", ⑤);
14  return 0;
15 }

34.①处应填( ) [3分]

A.1

B.n-1

C.2

D.0

35.②处应填( C ) [3分]

A.n/i

B.n/(i*i)

C.i*i

D.iii

36.③处应填( ) [3分]

A.if(n%i==0)

B.if(i*i<=n)

C.while(n%i==0)

D.while(i*i<=n)

37.④处应填( ) [3分]

A.n>1

B.n<=1

C.i<n/i

D.i+i<=n

38.⑤处应填( ) [3分]

A.2

B.n/i

C.n

D.i

2 相关知识点

1) 质数 (Prime Number)

一个大于1的自然数,除了1和它本身以外不再有其他因数的数称为质数

例如

2、3、5、7、11、13、17、19等都是质数

注意

质数只有两个正因数:1和它本身

2) 因数

因数是指能整除给定正整数的数

例如,8的因数有1、2、4、8,因为这些数都能整除8

3) 质因数

质因数是指能整除给定正整数且是质数的因数

例如,36的质因数是2和3,因为36=2×2×3×3,这里的2和3都是质数

4) 质因数分解

每个合数都可以写成几个质数相乘的形式.

其中每个质数都是这个合数的因数一个,合数用几个质数相乘的形式表示出来,叫做分解质因数

例如

12=2x2x3

5) 质因数分解朴素算法

#include <cstdio>
using namespace std;
int n, i;
int main(){scanf("%d", &n);for(i =2;i<=n;i ++){//从质数2开始 去试除 /*一个质数可能试除多次 比如12 =2 *2 *3 ,其中2需要试除2次 */ while(n%i==0){C++printf("%d ", i);n = n / i;}}return 0;
}

6) 质因数分解优化

朴素算法从2到n试除过程中需要试除n-1次

实际试除sqrt(n)次即可

n不可能有2个大于sqrt(n)的质因数

证明 - 发证法

1质因数相乘还是n的因数,因数一定是<=n的

2如果2个因数都大于sqrt(n),那这2个因数相乘必然大于n

因此1和2是矛盾的,所以如下结论成立

n不可能有2个大于sqrt(n)的质因数

7) 优化后质因数分解

#include <cstdio>
using namespace std;
int n, i;
int main(){scanf("%d", &n);for(i =2;i*i<=n;i ++){//从质数2开始 去试除 /*一个质数可能试除多次 比如12 =2 *2 *3 ,其中2需要试除2次 */ while(n%i==0){printf("%d ", i);n = n / i;}}/*优化后情况 有可能n为i ,i*i<=n判断不成立例如 12 -- 分解2 2 后剩余3 此时 i*i=3*3 n为3不成立,少输出1次 */if(n>1) printf("%d ", n);//此时的n为对为最后一个质数 return 0;
}

3 思路分析

34.①处应填( C ) [3分]

A.1

B.n-1

C.2

D.0

分析

质数从2开始,逐一试除,不会出现输出合数的情况

例如20=2 * 2 * 5

2去试除,剩余5

3去试除,4去试除,此时,4已经被因子2分解了

5去试除

35.②处应填( C ) [3分]

A.n/i

B.n/(i*i)

C.i*i

D.i* i * i

分析

n不可能有2个大于sqrt(n)的质因数

所以枚举试除到sqrt(n) 即可

36.③处应填( C ) [3分]

A.if(n%i==0)

B.if(i*i<=n)

C.while(n%i==0)

D.while(i*i<=n)

分析

如果i去试除n,如果可以整除,则分解掉i

可能出现到多次试除,直到把i都分解掉掉

例如

12=2 * 2 * 3

其中2被分解2次

37.④处应填( A ) [3分]

A.n>1

B.n<=1

C.i<n/i

D.i+i<=n

分析

优化后情况 有可能n为i ,i*i<=n判断不成立
例如 12 -- 分解2 2 后剩余3 此时 i*i=3*3 n为3不成立,少输出1次 
此时需要判断n是否分解完所有质数,如果n>1,说明还有质因子没分解完

38.⑤处应填( C ) [3分]

A.2

B.n/i

C.n

D.i

分析

同37题
主要和i*i<=n 有关,可能会漏调一个i的判断
例如
12 =2 * 2 * 3
2去试除,可以把2个2分解掉    
此时3去试除,面临判断i*i<=n 即 3 * 3 <=3判断,不成立,会漏掉3 (此时n为3)
例如如下情况即不存在这种情况
36 = 2 * 2 * 3 * 3
2去试除,可以把2个2分解掉
此时3去试除,面临判断i*i<=n 即 3 * 3 <=9判断,条件成立,会把2个3分解掉
所以只可能漏调一个质因数,并且此时n为对应质因数

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

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

相关文章

mysql报错:Unknown collation: ‘utf8mb4_0900_ai_ci‘的原因及解决方法

参考博客&#xff1a;http://t.csdnimg.cn/NRzyk 报错场景描述 使用navicate在查询中运行sql语句时报错&#xff1a;Unknown collation: utf8mb4_0900_ai_ci 报错原因 生成转储文件的数据库版本为8.0&#xff0c;我本地数据库版本为5.6&#xff0c;高版本导入到低版本&…

【C++】透析类和对象(下)

有不懂的可以翻阅我之前文章&#xff01; 个人主页&#xff1a;CSDN_小八哥向前冲 所属专栏&#xff1a;CSDN_C入门 目录 拷贝构造函数 运算符重载 赋值运算符重载 取地址运算符重载 const成员函数 取地址重载 再探构造函数 初始化列表 类型转换 static成员 友元 内…

【CN】Argo 持续集成和交付(一)

1.简介 Argo 英 [ˈɑ:ɡəu] 美 [ˈɑrˌɡo] Kubernetes 原生工具&#xff0c;用于运行工作流程、管理集群以及正确执行 GitOps。 Argo 于 2020 年 3 月 26 日被 CNCF 接受为孵化成熟度级别&#xff0c;然后于 2022 年 12 月 6 日转移到毕业成熟度级别。 argoproj.github.i…

(最全最小白易懂版)Yolov8新手教程-配置环境、数据集处理、目标检测、结果分析处理(图像指标、可视化结果)、报错分析等全过程学习记录

目录 一、安装环境&#xff08;配置yolo、demo测试&#xff09; 二、数据集准备&#xff08;格式学习&#xff09; 三、训练数据集 1.划分数据集 2.训练数据集 2.1常规训练 2.2微调 3.各种报错记录 3.1AttributeError 3.2TypeError 3.3Error while loading conda en…

Flutter Dio网络请求报错FormatException: Unexpected character

最近开发Flutter项目&#xff0c;网络请求采用的是Dio框架&#xff0c;在发起网络请求的时候报错&#xff1a; 网络请求返回的数据为&#xff1a; var returnCitySN {\"cip\": \"127.0.0.1\", \"cid\": \"00\", \"cname\"…

浅谈 JVM 的内存划分、类加载、垃圾回收机制

文章目录 一、JVM内存划分1.1、JVM为什么要进行内存划分&#xff1f; 二、JVM类加载2.1、什么是类加载&#xff1f;2.2、类加载大体过程2.3、何时触发类加载&#xff1f;2.4、双亲委派模型[!面试高频问题]2.4.1、类加载器2.4.1、什么是双亲委派模型&#xff1f; 三、JVM 垃圾回…

Flink SQL 的工作机制

前言 Flink SQL 引擎的工作流总结如图所示。 从图中可以看出&#xff0c;一段查询 SQL / 使用TableAPI 编写的程序&#xff08;以下简称 TableAPI 代码&#xff09;从输入到编译为可执行的 JobGraph 主要经历如下几个阶段&#xff1a; 将 SQL文本 / TableAPI 代码转化为逻辑执…

书生大模型实战营--L1关卡-OpenCompass 评测 InternLM-1.8B 实践

一、使用 OpenCompass 评测 internlm2-chat-1.8b 模型在 MMLU 数据集上的性能 1、使用lmdeploy部署 internlm2-chat-1.8b模型 2、根据OpenCompass官网教程安装并下载数据集 opencompass/README_zh-CN.md at main open-compass/opencompass GitHub 注意&#xff1a; pyhton…

【Java】this关键字、构造方法、标准javabean类(009)

目录 ♦️构造方法 &#x1f383;无参数构造方法&#xff08;空参构造&#xff09; &#x1f383;有参数构造方法 ♦️this关键字 &#x1f383;就近原则 &#x1f383;使用this关键字调用本类中的属性 ​编辑 &#x1f383;使用this关键字调用成员方法 ​编辑 &#x…

Collention集合基础知识

Array 数组是一种连续的内存空间存储相同数据类型数据的线性数据结构 数组获取其他元素的地址值 寻址公式 a[i] baseaddress i*datatypesize 为什么数组索引从0开始 从1开始不行吗 从0开始寻址公式 a[i] baseaddress i*datatypesize 从1开始寻址公式 a[i] baseadd…

【计算机网络】无线网络和移动网络(第9章)大纲(共70+页)

最后只复习了1.5天&#xff0c;应用层简单过了一遍。 本来是mindmap的&#xff0c;但是太大了只能导出成提纲了&#xff0c;凑合看吧orz。 如果你找我要源文件&#xff0c;最好是在2024年&#xff0c;不然我可能就找不到了&#xff08;&#xff09;。

基于STC8H系列单片机的中断系统

基于STC8H系列单片机的中断系统 STC8H4K64TL单片机介绍STC8H4K64TL单片机管脚图(48个引脚)STC8H4K64TL单片机串口仿真与串口通信STC8H4K64TL单片机管脚图(32个引脚)STC8H4K64TL单片机管脚图(20个引脚)STC8H系列单片机管脚说明STC8H系列单片机I/O口STC8H系列单片机I/O口相…

【C++】:红黑树的应用 --- 封装map和set

点击跳转至文章&#xff1a;【C】&#xff1a;红黑树深度剖析 — 手撕红黑树&#xff01; 目录 前言一&#xff0c;红黑树的改造1. 红黑树的主体框架2. 对红黑树节点结构的改造3. 红黑树的迭代器3.1 迭代器类3.2 Begin() 和 End() 四&#xff0c;红黑树相关接口的改造4.1 Find…

centos stream 9安装 Kubernetes v1.30 集群

1、版本说明&#xff1a; 系统版本&#xff1a;centos stream 9 Kubernetes版本&#xff1a;最新版(v1.30) docker版本&#xff1a;27.1.1 节点主机名ip主节点k8s-master172.31.0.10节点1k8s-node1172.31.0.11节点2k8s-node2172.31.0.12 2、首先&#xff0c;使用Vagrant和Virt…

【2024年国际高等学校数学建模竞赛IMMCHE】问题 B:太空移民计划和战略 问题分析及数学模型及求解代码

【2024年国际高等学校数学建模竞赛IMMCHE】问题 B&#xff1a;太空移民计划和战略 问题分析及数学模型及求解代码 Problem B: Space Migration Program and Strategy 1 题目 我们的未来有两种可能&#xff1a;第一&#xff0c;我们将留在地球上&#xff0c;直到完全灭绝&…

Hive3:Hive初体验

1、创建表 CREATE TABLE test(id INT, name STRING, gender STRING);2、新增数据 INSERT INTO test VALUES(1, 王力红, 男); INSERT INTO test VALUES(2, 钉钉盯, 女); INSERT INTO test VALUES(3, 咔咔咔, 女);3、查询数据 简单查询 select * from test;带聚合函数的查询 …

Halcon 引擎方式调试

1.C# 端添加代码 启动调试模式 public HDevEngine MyEngine new HDevEngine(); // halcon引擎;// 启动调试服务 MyEngine.StartDebugServer();2.Halcon程序添加到进程 打开Halcon程序 【执行】>【附加到进程】 点击【确定】 3.C# 程序执行到相关位置 C# 程序执行调用…

vector深度剖析及模拟实现

目录 前言vector核心框架模拟实现1. 前期准备2. 构造和销毁补充: 隐式类型转换和多参数构造的区别 3. 迭代器相关4. 容器相关补充: memcpy拷贝问题 5. 元素访问6. vector的修改测试代码 总结 前言 本文重点模拟实现vector的核心接口, 帮助我们更好的理解底层逻辑, 以及对vecto…

科学又省力 宠物浮毛怎么去掉便捷高效?除毛秘籍养宠空气净化器

上次和朋友逛完街去她家&#xff0c;她家的猫哈基米一开门就飞奔过来&#xff0c;朋友直接抱起它狂亲。结果&#xff0c;猫毛和汗水粘得到处都是&#xff0c;手臂上、脸上都是&#xff0c;看得我这鼻炎星人直起鸡皮疙瘩。很多养宠物的朋友都说&#xff0c;天天给猫狗梳毛&#…

Android Studio导入源码

在有源码并且编译环境可用的情况下&#xff1a; 1.生成导入AS所需的配置文件 在源码的根目录执行以下命令&#xff1a; source build/ensetup.sh lunch 要编译的项目 make idegen //这一步会生成out/host/linux-x86/framework/idegen.jar development/tools/idegen/idegen.sh…