參考**
原理:篩法的思想是去除要求範圍內所有的合數,剩下的就是素數了,而任何合數都可以表示為素數的乘積,因此如果已知乙個數為素數,則它的倍數都為合數。
一般篩法求素數:
#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...