Skip to content

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;
}