CSP 2023 普及组第一轮 - CSP/S 2023初试题 程序阅读第三题解析

一、程序阅读

#include <iostream>
#include <cmath>
using namespace std;

int solve1(int n) {
	return n * n;
}

int solve2(int n) {
	int sum = 0;
	for (int i = 1; i <= sqrt(n); i++) {
		if (n % i == 0) {
			if (n / i == i) {
				sum += i * i;
			} else {
				sum += i * i + (n / i) * (n / i);
			}
		}
	}
	return sum;
}

int main() {
	int n;
	cin >> n;
	cout << solve2(solve1(n)) << " " << solve1((solve2(n))) << endl;
	return 0;
}

二、代码分析

这个代码非常简单,我们可以轻易的发现solve1函数是计算n的平方的,solve2函数是计算n所有因子的平方和。

三、题目分析

假设输入的 n 是绝对值不超过 1000 的整数,完成下面的判断题和单选题。

判断题

1. 如果输入的 n 为正整数,solve2 函数的作用是计算 n 所有的因子的平方和(对)【solve2函数中循环sqrt(n)次,每次找到一个因数,先判断是不是n的平方,如果是,计算它本身即可,如果不是,那还要吧n / i计算进去】

2. 第 13∼14 行的作用是避免 n 的平方根因子 i(或 n/i )进入第 16 行而被计算两次(对)【上题已经解释了】

3. 如果输入的 n 为质数,solve2(n) 的返回值为 n^2+1(对)【质数只有两个因子,一个是1,一个是n,其因子和就是1^2+n^2,也就是1+n^2】

单选题

1.(4分)如果输入的 n 为质数 p 的平方,那么 solve2(n) 的返回值为(B)

A. p^2+p+1

B. n^2+n+1
C. n^2+1
D. p^4+2p^2+1

【答案为1+p^2+n^2,但题目下没有,由于n = p^2,所以B对】

1. 当输入为正整数时,第一项减去第二项的差值一定(D)

 A. 大于 0

 B. 大于等于 0 且不一定大于 0

 C.  小于 0
 D.  小于等于 0 且不一定小于 0

【带入两个数进去即可。第一个为1,差值为0;

第二个为2,第一个比第二个小4】

3. 当输入为 5 时,输出为(C)

A. 651 625

B. 650 729
C. 651 676
D. 652 625

【直接计算即可】

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值