關於**中的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的值,重...