13006: 【原3006】Divisor Summation
题目
题目描述
author: zdq 原OJ链接:https://acm.sjtu.edu.cn/OnlineJudge-old/problem/3006
Description
给定一个自然数n(1 <= n <= 500000), 请计算它的所有真因数之和. 定义: 自然数的真因数是严格小于这个数本身的因数. 比如, 20有个真因数: 1, 2, 4, 5, 10. 其真因数之和为: 1 + 2 + 4 + 5 + 10 = 22.
Input Format
第一行是一个自然数m(1<=m<=10), 表示有m组数据需要计算. 接下来m行, 每行一个自然数, 代表需要计算真因数之和的n.
Output Format
每行一个数: 所输入n的真因数之和.
Sample Input
3
2
10
20
Sample Output
1
8
22
satgo1546's solution
#include <iostream>
using namespace std;
int main(int argc, char *argv[]) {
cin >> argc;
while (argc--) {
int n;
cin >> n;
int sum = 0;
for (int i = 1; i <= n / 2; i++) {
if (n % i == 0) sum += i;
}
cout << sum << endl;
}
return 0;
}