【任務】:給定乙個正整數n,求出[2,n]中的所有素數。
【說明】:陣列valid[i]記錄i是否為素數,初始所有的valid[i]都為true,從二開始從小到大列舉i,若valid[i]=true,則把從i^2開始的每乙個i的倍數的valid賦為false,結束之後valid[i]=true的就是素數。
陣列ans用來儲存素數。
解法1:依舊1表示素數,0表示合數,先找出乙個素數,然後將其與接下來的數相乘,並把它們的乘積置為0
#include#include#define maxn 1000000
using namespace std;
bool valid[maxn];
int ans[maxn];
int main()
for(int j=1;((j<=tot)&&(i*ans[j]<=n));j++)
}for(int i=1;i<=tot;i++)
{ cout《解法2:
思路:1表示素數,0表示合數,找出乙個素數a,並把在[2,n]範圍內的a的倍數全部置為0,最後,
剩下的為1的素數則為素數。
#include#define maxn 1000000
using namespace std;
bool valid[maxn];
int ans[maxn];
int main()
{ int n,tot=0;
cin>>n;
for(int i=2;i<=n;i++)
valid[i]=1;
for(int i=2;i<=n;i++)
{ if(valid[i]==1)
{ if(n/i
素數與素數檢測
一.試除法 根據素數的定義,假設要判斷的自然數為n,那麼最簡單的方法便是用2 n 1 之間的數字依次列舉試除一遍,如果能整除,那說明這個數不是素數,顯然,此種演算法的效率極低。初學c語言的人會使用另一種改進的試除法,那便是除數不用取遍2 n 1 而是取2 int sqrt n 但是當n很大時,此種演...
素數與素數篩
素數篩法 線性篩法 啊,耳熟能詳。素數又稱質數,乙個大於1 11的自然數,除了1 11和它本身外,不能被其他自然數整除,換句話說就是該數除了1 11和它本身以外不再有其他的因數 否則稱為合數。啊!1 11不是素數啊 啊,也耳熟能詳了,暴力列舉一下除1 11和本身的自然數是否會被整除。bool is ...
數論 素數 素數相關基礎 尤拉函式與尤拉定理
尤拉定理與尤拉函式在數論方面的應用十分廣泛,幾乎所有的形如a n k 1的東西都可以往上靠。這裡暫時不細說怎麼用,先講基礎內容。1 尤拉函式 尤拉函式 n 表示不超過n且與n互素的正整數的個數 計算公式為 n n 1 1 p1 1 1 p2 其中p1,p2 為n的質因數 2 尤拉定理 若a,n是正整...