阿軒是個國中老師,他最近剛教到質因數分解這個單元,為了讓學生們練習,他會提出一個數字 N,請同學回答這個數字是不是由兩個質數的乘積,如果是則要說出是由哪兩個質數相乘。
請你撰寫一個程式來產生正確解答。
範例測資
範例輸入 | 範例輸出 |
---|---|
輸入僅有一列,包含一個數字 N (2 ≤ N ≤ 2 × 109)。 | 若 N 是兩個質數 A 與 B 的乘積,輸出兩個質數 A 與 B (A ≤ B),兩數之間以一個空格分開。若 N 不是兩個質數的乘積,輸出「0 0」。 |
14 | 2 7 |
63 | 0 0 |
917747 | 257 3571 |
解題思路
判斷 N 的因數,For迴圈只需從 2 跑到 sqrt(N)+1 即可。如果有因數的話就判斷該因數是否為質數,判斷質數也是確認 2 到 sqrt(因數)+1 是否有其他因數。還要判斷 N/因數 這個數字是否為質數,如果是的話就可以輸出兩個數字並 break 迴圈。
範例程式碼-ZeroJudge N362: 質數遊戲 (Primes)
#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;
cin >> N;
bool ok = false;
for (int i = 2; i<int(sqrt(N))+1; i++)
{
if (N % i == 0 && isPrime(i) && isPrime(N / i))
{
ok = true;
cout << i << " " << N/i << "\n";
break;
}
}
if (!ok) cout << "0 0\n";
}
//ZeroJudge N362
//Dr. SeanXD