描述
求正整數N(N>1)的質因數的個數。 相同的質因數需要重復計算。如120=2*2*2*3*5,共有5個質因數。
輸入描述:
可能有多組測試數據,每組測試數據的輸入是一個正整數N,(1<N<10^9)。
輸出描述:
對于每組數據,輸出N的質因數的個數。
示例1
輸入:
120
輸出:
5
思路:
只需要判斷因數是否能夠整除當前的數,而無需判斷因數本身是否為質數。質因數分解是將一個數分解為一系列質數的乘積,而我們只需要關注能夠整除的因數,因為如果一個非質數能夠整除當前的數,那么它一定可以被分解為更小的因數的乘積。
例如,考慮將120分解為質因數的過程:
120= 2 * 60
60 = 2 * 30
30 = 2 * 15
15 = 3 * 5
在這個過程中,我們并沒有判斷2、3、5是否為質數,只需要判斷它們能否整除當前的數。因為即使它們不是質數,它們也可以分解為更小的因數的乘積,而最終會得到正確的質因數分解結果。
在質因數分解問題中,我們只需要關注因數能否整除當前的數,而無需判斷因數本身是否為質數,極大減少了代碼的冗余運算,但依然可以得到正確的結果。
源代碼:
#include<iostream>
#include<cmath>
using namespace std;//例題6.9 質因數的個數
int main()
{int n;while (cin >> n) {int res = 0;for (int i = 2; i <= sqrt(n); i++) {while (n % i == 0) {res++;n /= i;}}if (n > 1) {res++;}cout << res << endl;}return 0;
}
提交結果:
?
編輯切換為居中
添加圖片注釋,不超過 140 字(可選)