C ,C 篩法求素數

2021-04-06 23:51:59 字數 868 閱讀 1334

自己沒事,寫的乙個程式,篩法的原理:在n(n為求素數的範圍)以內的數中,把2的倍數都去掉,再把3的倍數都去掉,如此,依次把第乙個沒有去掉數的倍數去掉,注意這個數本身不去掉.最後沒被去掉的為所有的素數

#include "stdafx.h"

#include "string.h"

#include "math.h"

#include "windows.h"

#include "iostream.h"

#include "stdlib.h"

//一共有三個演算法a b a2 其中a b 很慢,

//a2是改進型,速度很快,如不往螢幕輸出 1億內的質數在1.3秒內求出。

//b是用的是位操作,用記憶體少 因為沒有優化,所以速度慢

class prime

void printprimenum();

void printprimenumfor_a2();

void calculate_a();

void calculate_b();

void calculate_a2();

~prime();

void prime::calculate_a()

for(j=i+i;j<=primenum;j+=i)}}

void prime::calculate_a2()}}

void prime::calculate_b()

}void prime::printprimenum()

_a** ror mask,1}}

void prime::printprimenumfor_a2()

}prime::~prime()

int main(int argc, char* argv)

篩法求素數 線性篩法求素數

2021年更新版 篩法求素數 線性篩法求素數 要理解篩法求素數首先要知道乙個定理,整數唯一分解定理 任意大於等於2的正整數都有且只有一種方式寫出其質因子的乘積表示式。a p1p2p3p4 pn pi是素數且pi pj eg 2 2 4 22 12 223 36 2233 也就是說任意乙個合數都能分成...

素數篩法求素數

素數篩類似於打表標記,預先處理掉非素數的數,即素數的倍數 任意非素數都可以由幾個素數相乘得到 於是效率比暴力求解快得多。埃氏篩法的效率為o n loglog n 簡單易懂,但是會重複標記,比如當i為2時,6會被標記掉,然而當i為3時,6又會被重複標記,這樣的重複訪問加大了時間複雜度,於是有了尤拉篩。...

篩法求素數

素數篩法就是每次把已知的素數的倍數曬去,篩掉前sqrt n 中素數的倍數就可以了 先把n個自然數按次序排列起來。1不是質數,也不是合數,要划去。第二個數2是質數留下來,而把2後面所有能被2整除的數都劃去。2後面第乙個沒劃去的數是3,把3留下,再把3後面所有能被3整除的數都劃去。3後面第乙個沒劃去的數...