演算法工程師數學題(2)篩法求素數

2021-08-20 21:33:04 字數 787 閱讀 4910

參考**

原理:篩法的思想是去除要求範圍內所有的合數,剩下的就是素數了,而任何合數都可以表示為素數的乘積,因此如果已知乙個數為素數,則它的倍數都為合數。

一般篩法求素數:

#include"cstdio"

#include"cstring"

using namespace std;

#define n 100//求n範圍內的素數

int su[n], cnt; //存放素數的陣列,素數的個數變數

int allshu[n]; //存放所有數的陣列

void prime()

for (int j = i * 2; j <= n; j += i)//素數的倍數都為合數

}}int main()

普通的線性篩法雖然大大縮短了求素數的時間,但是實際上還是做了許多重複運算,比如2*3=6,在素數2的時候篩選了一遍,在素數為3時又篩選了一遍。如果只篩選小於等於素數i的素數與i的乘積,既不會造成重複篩選,又不會遺漏。時間複雜度幾乎是線性的。

優化線性篩法求素數:

#include"cstdio"

#include"cstring"

using namespace std;

#define max 100//求max範圍內的素數

int su[max], cnt;

int isprime[max];

void prime() }}

int main()

演算法工程師數學題(4)同餘定理

同餘定理性質 1 同乙個除數,兩數的和 或差 與他們餘數的和 或差 同餘數。a b m a m b m m 2 同乙個除數,兩數的乘積與他們餘數的乘積同餘。a b m a m b m m 3 同乙個除數,如果兩個整數同餘,那麼他們的差就一定能被這個數整除。4 同乙個除數,如果兩個整數同餘,那麼他們的...

演算法工程師數學題(1)最大公約數

求最大公約數三種方法 輾轉相除法 演算法簡介 將兩個數a,b相除,如果餘數c不等於0,就把b的值給a,c的值給b,直到c等於0,此時最大公約數就是b.void main printf s d和 d的最大公約數為 d n m,n,b printf s n cvwaitkey 0 更相減損術 演算法簡介...

刷題筆記 C C 工程師能力評估2

題目 unsigned char p1 unsigned long p2 p1 unsigned char 0x801000 p2 unsigned long 0x810000 請問p1 5 什麼?p2 5 什麼?a.801005 810005 b.801010 810014 c.801005 81...