c 實現篩除法求素數和分解質因數

2021-10-03 20:35:30 字數 1118 閱讀 8766

關於**中的maxn變數,它實際上是和輸入的n是同一量級,或者說直接可以等於n;但和普通素數求法一樣,sqrt(n)就可以解決問題。

知識點一:

篩除法原理:若n為素數,那他的n×

\times

× 2,n×

\times

× 3等等,就都不是素數,在之後的篩查就直接跳過。至於為何從j ×

\times

× j開始,是因為從j ×

\times

× 2開始,會有好多數重複計算。

知識點二:

vector變數做形參。有兩種形式

1.位址形式,除在形參處加位址符外別無區別,見最終**。

2.指標形式,形參處加指標符號*,實參處傳位址&,使用時要用指標操作->

void

initial

(vector<

int>

*prime)

isprime[0]

=false

; isprime[1]

=false

;for

(int j =

2;j}int

main()

最終**,形參形式

#include

#include

#include

#include

using

namespace std;

const

int maxn =

sqrt

(1e4)+

1;void

initial

(vector<

int>

&prime)

isprime[0]

=false

; isprime[1]

=false

;for

(int j =

2;j}int

main()

}if(n !=1)

anwser++

;printf

("%d\n"

,anwser);}

return0;

}

質因數分解(C )(求最小質因數反求最大質因數)

p1075 質因數分解 題目描述 已知正整數nn是兩個不同的質數的乘積,試求出兩者中較大的那個質數。輸入格式 乙個正整數nn。輸出格式 乙個正整數pp,即較大的那個質數。輸入輸出樣例 輸入 21 輸出 7 說明 提示 n 2 10 9 noip 2012 普及組 第一題 直接找最大質因數會超時,所以...

C 實現質因數分解

質數 prime number 又稱素數,有無限個。乙個大於1的 自然數,除了1和它本身外,不能被其他自然數 整除 除0以外 的數稱之為素數 質數 否則稱為 合數。根據 算術基本定理 每乙個比1大的整數,要麼本身是乙個質數,要麼可以寫成一系列質數的乘積 而且如果不考慮這些質數在乘積中的順序,那麼寫出...

質因數分解演算法C 實現

演算法思想 對n進行分解質因數,應先找到乙個最小的質數k,然後按下述步驟完成 1 如果這個質數恰等於n,則說明分解質因數的過程已經結束,列印出即可。2 如果n k,但n能被k整除,則應列印出k的值,並用n除以k的商,作為新的正整數你n,重複執行第一步。3 如果n不能被k整除,則用k 1作為k的值,重...