重點 九度 OJ 1207 質因數的個數

2021-08-14 10:20:25 字數 1259 閱讀 1674

題目描述:求正整數n(n>1)的質因數的個數。

相同的質因數需要重複計算。如120=2*2*2*3*5,共有5個質因數。

輸入:可能有多組測試資料,每組測試資料的輸入是乙個正整數n,(1

輸出:對於每組資料,輸出n的質因數的個數。

樣例輸入:

120

樣例輸出:

5

注意:1不是n的質因數;若n為質數,n是n的質因數。

2023年清華大學計算機研究生機試真題

分析:這道題綜合性很強,基礎還是素數篩法,先明確乙個整數n=(p1^e1)*(p2^e2)*(p3^e3)*....  p為質因數,e為對應的次冪,即有多少個相同的該質因數

將不大於給定的n的素數全部檢測一遍,若能整除n則該素數為n的乙個質因數,然後用這個素數整除分解n,同時統計整除的次數,即為該素數對應的次冪。

觀察**後考慮乙個問題:為什麼素數篩法只到10000就結束,而不是題目的範圍10^9,因為n至多存在乙個比sqrt(n)大的質因數,如若不然,則會這個大質因數的平方就大於n了,所以只要把比sqrt(n)小的質因數全部分解出來,剩下的就有且只有乙個素數為n的質因數。

還有,本解法同樣可以確定n的因數的個數(包括質因數和非質因數)=(e1+1)*(e2+1)*(e3+1)*......  即所有質因數的次冪不同的組合,+1是當次冪為0的情況

還有,這道題,我的電腦執行的時候會因為規模太大而終止,但是可以ac的,

**如下:

#include int prime[100001];

int primesize;

bool mark[100001];

void init()

for(i=2;i<=100000;i++)

}

}} int main(int argc, char** argv) {

int n;

init();

while(scanf("%d",&n)!=eof)

{ int ansprime[30];//記錄質因數

int anssize=0;//記錄不同質因數的個數

int ansnum[30]; //記錄相同質因數的個數

int i;

for(i=0;i

九度OJ 1207 質因數的個數

題目1207 質因數的個數 時間限制 1 秒 記憶體限制 32 兆 特殊判題 否 提交 9302 解決 3019 題目描述 求正整數n n 1 的質因數的個數。相同的質因數需要重複計算。如120 2 2 2 3 5,共有5個質因數。輸入 可能有多組測試資料,每組測試資料的輸入是乙個正整數n,1 輸出...

九度oj題目1207 質因數的個數

題目描述 求正整數n n 1 的質因數的個數。相同的質因數需要重複計算。如120 2 2 2 3 5,共有5個質因數。輸入 可能有多組測試資料,每組測試資料的輸入是乙個正整數n,1 輸出 對於每組資料,輸出n的質因數的個數。樣例輸入 120 樣例輸出 5 注意 1不是n的質因數 若n為質數,n是n的...

質因數的個數 九度教程第54題

對乙個數x分解素因數即確定素數p1,p2 pn,使其滿足下式 必要時還要確定e1,e2等冪指數。本題即求e1,e2,en的和。利用素數篩法預先篩選出所有可能在題面所給資料範圍內成為素因數的素數。並在程式輸入待處理數字n時,依次遍歷所有小於n的素數,判斷其是否為n的因數。若確定某素數為n的因數,則通過...