SP12304
简述题目:
题目要求找出满足条件 \(σ(i) = n\) 的最小整数 \(i\),其中 \(σ(i)\) 表示 \(i\) 的所有正因子的和。
解题思路:
- 首先定义一个函数 \(Suum(i)\),用于计算 \(i\) 的所有正因子的和。在函数内部,使用一个循环遍历 \(i\) 的所有可能因子。对于每一个因子 \(i\),如果 \(i\) 能够整除 \(n\),那么将 \(i\) 加到用来存储的 \(sum\) 上,并将 \(n\) 除以 \(i\) 得到的商加到 \(sum\) 上。注意:除数和被除数不能相同。
- 接下来定义一个函数 \(minsum(n)\),用于找到满足条件的最小整数 \(i\)。初始化 \(i\) 为 \(1\),然后进行如下步骤:
- 检查 \(Suum(i)\) 是否等于 \(n\),如果相等,则返回当前的 \(i\)。
- 如果 \(i\) 大于 \(n\),说明没有满足条件的 \(i\),跳出循环。
- 否则,\(i\) 自增 \(1\),继续下一轮循环。
主要知识:
这个题目主要用到了数学知识中的因子和的概念,以及循环和条件语句的使用。
Code:
#include <iostream>
using namespace std;
int Suum(long long n) {
long long sum = 0;
for (int i = 1; i * i <= n; i++) {
if (n % i == 0) {
sum += i;
if (i != (n/i)) {
sum += (n/i);
}
}
}
return sum;
}
int minsum(long long n) {
long long i = 1;
while (true) {
if (Suum(i) == n) {
return i;
}
if (i > n) {
break;
}
i++;
}
return -1;
}
int main() {
int T;
cin >> T;
while (T--) {
long long n;
cin >> n;
long long ans = minsum(n);
cout << ans << endl;
}
return 0;
}
本文来自一名初中牲,作者:To_Carpe_Diem