題目敘述
題目採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;
}
}
留言
張貼留言