求n以內的素數

2021-09-01 01:15:29 字數 1397 閱讀 5765

求n以內素數。

素數又稱質數,它是這樣的整數,它除了能表示為它自己和1的乘積以外,不能表示為任何其它兩個整數的乘積。

有兩種方法:篩選法和開根號法

篩選法:從小到大篩去乙個已知素數的所有倍數。依次刪除可被2整除,3整除。。。。的數字,剩下的則為素數 。

開根號法:如果乙個數(>2),對這個數求平方根,如果這個數能被這個數的平方根到2之間的任何乙個(只要有一人就行)整除說明就不是質數,如果不能就說明是質數!

原理:假如乙個數n是合數,它有乙個約數a,a×b=n,則a、b兩個數中必有乙個大於或等於根號n,乙個小於或等於根號n。因此,只要小於或等於根號n的數(1除外)不能整除n,則n一定是素數。

#include #include using namespace std;

void getprime0(int);

void getprime(int);

void getprime2(int);

void getprime3(int);

int main()

//求n以內的素數

//素數又稱質數,它是這樣的整數,它除了能表示為它自己和1的乘積以外,不能表示為任何其它兩個整數的乘積。

//演算法:篩選法,從小到大篩去乙個已知素數的所有倍數。依次刪除可被2整除,3整除。。。。的數字,剩下的則為素數

void getprime0(int n)

}if(m)

}cout << endl;

}//同上

void getprime(int n)

for(int i = 2; i < n + 1; i ++)

}

} for(int i = 1; i < n + 1; i ++)

}

cout << endl;

} //等同於getprime(int n)

void getprime2(int n)

for(i = 2; i < n + 1; i ++)}}

} for(i = 1; i < n + 1; i ++)

}

cout << endl;

}//開根號法

//演算法:如果乙個數(>2),對這個數求平方根,如果這個數能被這個數的

//平方根到2之間的任何乙個(只要有一人就行)整除說明就不是質數,

//如果不能就說明是質數!

//原理:假如乙個數n是合數,它有乙個約數a,a×b=n

//則a、b兩個數中必有乙個大於或等於根號n,乙個小於或等於根號n。

//因此,只要小於或等於根號n的數(1除外)不能整除n,則n一定是素數。

void getprime3(int n)

}if(j > k)

}}

篩法求n以內的素數

篩法求素數 把2到n中所有的數都列出來,然後從2開始,先劃掉n內所有2 的倍數,然後每次從下乙個剩下的數 必然是素數 開始,劃掉其n內的所有倍數。最後剩下的數,就都是素數。空間換時間,加快了計算速度。include include include include define maxn 100000...

求N以內的所有素數

如下 include stdafx.h include conio.h include math.h include malloc.h typedef long long prime typedef struct pn 構造素數節點 struct pn next pn static pn prime...

篩選法求n以內素數(質數)

設定乙個標誌陣列isprime,isprime i 的值是1就表示i是素數。開始陣列元素值全部為1劃掉k的倍數,就是把isprime 2 k isprime 3 k 置成0最後檢查isprime陣列,輸出isprime i 為1的那些i include include using namespace...