a740.
质因数之和
--
海豚原创
| From: [140.117.194.238] |
發表日期
:
2025-01-06 17:23
一開始要判斷n是否為質數, 如果是就直接輸出不用進行後續的判斷, 不然會超時。
否則: 外迴圈用變數 i 找出 n 可能的因數, 內迴圈用變數 j 判斷 i 是否為質數, 如果是則讓 n 不斷除以該質因數並加總。
要注意for迴圈的臨界條件: i*i <= n 而不是 i*i < n
#include <stdio.h>
int main()
{
int n, sum, i, j;
while (scanf("%d", &n) != EOF)
{
sum = 0;
int isPrime = 1;
// check if n is prime
for (i = 2; i*i <= n; i++)
{
if (n % i == 0)
{
isPrime = 0;
break;
}
}
if (isPrime)
{
printf("%d\n", n);
continue;
}
for (i = 2; i <= n; i++)
{
// check if i is prime
isPrime = 1;
for (j = 2; j*j <= i; j++)
{
if (i % j == 0)
{
isPrime = 0;
break;
}
}
// calculate sum
if (isPrime)
{
while (n % i == 0)
{
sum += i;
n /= i;
}
}
}
printf("%d\n", sum);
}
return 0;
}