素數與函式

2021-07-23 18:32:23 字數 858 閱讀 4322

【任務】:給定乙個正整數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是正整...