ZeroJudge D120: Count the factors

同題:UVa 10699 – Count the factors

寫一個程式算出一個正整數有多少個不同的質因數。例如:45 = 335,所以 45 有 2 個質因數 (3 和 5)。

範例測資

範例輸入範例輸出
每組測試資料一列。含有 1 個正整數 N (1 < N <= 1000000)。
若 N = 0 代表輸入結束。
對每組測試資料輸出一列,N 有多少個不同的質因數。輸出格式請參考 Sample Output。
7
8
45
289384
930887
692778
636916
747794
238336
885387
760493
516650
641422
0
7 : 1
8 : 1
45 : 2
289384 : 3
930887 : 2
692778 : 5
636916 : 4
747794 : 3
238336 : 3
885387 : 2
760493 : 2
516650 : 3
641422 : 3

解題思路

可以創建一個函式去判斷一個數字是否為質數。使用 For迴圈 從 2 到 N,如果找到 N 的因數就判斷其是否為質數,如果是質數就將答案 +1。

範例程式碼-ZeroJudge D120: Count the factors

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

bool isPrime(int N) {
    for (int i = 2; i<int(sqrt(N)+1); i++) {
        if (N % i == 0) return false;
    }
    return true;
}

int main() {
    cin.sync_with_stdio(0);
    cin.tie(0);
    int N;
    while (cin >> N && N != 0) {
        int ans = 0;
        for (int i = 2; i<=N; i++) {
            if (N % i == 0 && isPrime(i)) {
                ans++;
            }
        }
        cout << N << " : " << ans << "\n";
    }
}

//ZeroJudge D120
//Dr. SeanXD

發佈留言