ZeroJudge A740: 質因數之和

題目敘述

題目採EOF收資料,每筆資料有一個正整數,要求將該數的所有質因數的和。

例子:

6 = 2 x 3,輸出 2 + 3 = 5

8 = 2 x 2 x 2,輸出 2 + 2 + 2 = 6

範例輸入

19

32

範例輸出

19

10

解題思路

使用For迴圈判斷輸入整數的質數為多少 (只需要判斷到輸入測資的根號即可),不需要使用scanf/printf不會TLE,但是建議使用cin加速。依題目測資判斷1不判斷為質數,如果輸入資料為質數,則直接輸出該質數即可。

解題程式碼如下 (僅供參考):

#include <iostream>
#include <math.h>
using namespace std;

int main() {
    cin.sync_with_stdio(0);
    cin.tie(nullptr);
    int num;
    while (cin >> num)
    {
        int ans = 0, OG = num;
        for (int i = 2; i <= (sqrt(OG))+1; i++)
        {
            if (num % i == 0)
            {
                while (num % i == 0 && num > 1)
                {
                    ans += i;
                    num /= i;
                }
            }
        }
        if (num != 1) ans += num;
        cout << ans << endl;
    }
}

留言