一、程序阅读
#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【直接计算即可】