当前位置: 首页 > news >正文

CSP-J 2024 入门级 第一轮(初赛) 阅读程序(1)

【题目】

CSP-J 2024 入门级 第一轮(初赛) 阅读程序(1)

1 #include <iostream>
2 using namespace std;
3
4 bool isPrime(int n) {
5 		if (n <= 1) {
6 			return false;
7 		}
8 		for (int i = 2; i * i <= n; i++) {
9 			if (n % i == 0) {
10 				return false;
11 			}
12 		}
13 		return true;
14 }
15
16 int countPrimes(int n) {
17 		int count = 0;
18 		for (int i = 2; i <= n; i++) {
19 			if (isPrime(i)) {
20 				count++;
21 			}
22 		}
23 		return count;
24 }
25
26 int sumPrimes(int n) {
27 		int sum = 0;
28 		for (int i = 2; i <= n; i++) {
29 			if (isPrime(i)) {
30 				sum += i;
31 			}
32 		}
33 		return sum;
34 }
35
35 int main() {
37 		int x;
38 		cin >> x;
39 		cout << countPrimes(x) << " " << sumPrimes(x) << endl;
40 		return 0;
41 }

判断题
1. 当输入为“10”时,程序的第一个输出为“4”,第二个输出为“17”。
2. 若将 isPrime(i)函数种的条件改为 i<=n/2,输入“20”时,countPrimes(20)的输出将变为“6”。
3. sumPrimes 函数计算的是从 2 到 n 之间的所有素数之和。
单选题
4. 当输入为“50”时,sumPrimes(50)的输出为( )
A.1060
B.328
C.381
D.275

5. 如果将 for(int i=2;i*i<=n;i++)改为 for(int i=2;i<=n;i++),输入“10”时,程序的输出( )
A.将不能正确计算 10 以内素数个数及其和
B.仍然输出4和17
C.输出3和 10
D.输出结果不变,但运行时间更短

【题目考点】

1. 循环:计数,求和
2. 函数
3. 质数判定

【解题思路】

isPrime函数判断传入的n是否是质数。
countPrimes函数统计1~n中的质数个数。
sumPrimes函数统计1~n中的质数加和。

【试题答案及解析】

判断题
1. 当输入为“10”时,程序的第一个输出为“4”,第二个输出为“17”。
答:T
1~10中质数有 2 , 3 , 5 , 7 2,3,5,7 2,3,5,7,有4个。加和为 2 + 3 + 5 + 7 = 17 2+3+5+7=17 2+3+5+7=17,叙述正确。

2. 若将 isPrime(i)函数中的条件改为 i<=n/2,输入“20”时,countPrimes(20)的输出将变为“6”。
答:F
由于 n 2 ≥ n \frac{n}{2} \ge \sqrt{n} 2nn ,所以i从2循环到n/2和i从2循环到 n \sqrt{n} n 的最终效果是一样的。
输入20时,countPrimes函数返回的仍然是1~20中的质数个数,有 2 , 3 , 5 , 7 , 11 , 13 , 17 , 19 2,3,5,7,11,13,17,19 2,3,5,7,11,13,17,19,共8个,应该输出8。该题叙述错误。

3. sumPrimes 函数计算的是从 2 到 n 之间的所有素数之和。
答:T
叙述正确。

单选题
4. 当输入为“50”时,sumPrimes(50)的输出为( )
A.1060
B.328
C.381
D.275

答:B
求1~50中的质数加和
2 + 3 + 5 + 7 + 11 + 13 + 17 + 19 + 23 + 29 + 31 + 37 + 41 + 43 + 47 = 328 2+3+5+7+11+13+17+19+23+29+31+37+41+43+47=328 2+3+5+7+11+13+17+19+23+29+31+37+41+43+47=328,选B。

5. 如果将 for(int i=2;i*i<=n;i++)改为 for(int i=2;i<=n;i++),输入“10”时,程序的输出( )
A.将不能正确计算 10 以内素数个数及其和
B.仍然输出4和17
C.输出3和10
D.输出结果不变,但运行时间更短

答:A
isPrime函数的内部原理为:
枚举从2到 ⌊ n ⌋ \lfloor \sqrt{n} \rfloor n 的所有整数,如果存在n的约数,那么n不是质数。如果不存在,则n是质数。
如果枚举从2到n的所有数字,那么当i为n时,一定有n%i == 0,isPrime函数一定会返回false,那么isPrime函数就失去了判断n是否为质数的功能,因此将不能正确计算10以内的质数个数和加和,选A。


http://www.mrgr.cn/news/36663.html

相关文章:

  • 【高阶数据结构】平衡二叉树(AVL)的插入(4种旋转方法+精美图解+完整代码)
  • PHP实现的纵横四海程序
  • 神经网络(四):UNet图像分割网络
  • 你了解文档透明加密系统吗?介绍7款顶尖文档透明加密软件,热门推荐!
  • Linux系统sersync数据实时同步
  • How to batch wise grad
  • Go语言匿名字段使用与注意事项
  • 跨地域协作新篇章:异地传输文件的最优方案
  • 步进电机认识
  • Linux必学知识点:单独编译、烧写构建某个镜像,打包Linux系统镜像
  • 主流数据库与最佳备份工具选择
  • 一篇带你搞定数据结构散列表
  • SAP ABAP AA 固定资产导入程序
  • 双十一数码产品有哪些? 2024年度双十一数码好物推荐
  • Echarts 堆叠柱形图如何添加总计
  • 生产k8s 应用容器内存溢出OOMKilled问题处理
  • [uni-app]小兔鲜-01项目起步
  • pdf转换成word有哪些方法?10种将PDF转成word的方法
  • 【Delphi】Delphi vcl 和 fmx 的区别是什么
  • 暴雨受邀出席2024 AI大模型生态算力峰会