C++利用用埃式篩法求解素?cái)?shù)
埃式篩法
首先要了解什么式埃式篩法之前,需要知道一個(gè)定理。
就是素?cái)?shù)的整數(shù)倍一定不是素?cái)?shù)。
了解了這個(gè)就基本大概懂了埃式篩法。
- 首先初始化一個(gè)布爾數(shù)組is_prime,用于記錄每個(gè)數(shù)是否為素?cái)?shù)。
- 從2開(kāi)始,枚舉每個(gè)數(shù)i,如果is_prime[i]為true,則i是素?cái)?shù),添加到素?cái)?shù)數(shù)組primes中。
- 然后對(duì)于每個(gè)i,我們讓我擴(kuò)大j倍,直到i*j小于輸入的數(shù)字n,把is_prime[i * j]賦值為false。
- 重復(fù)步驟2和3,直到遍歷到n為止。
埃式篩法求解某一個(gè)數(shù)字包含的所有素?cái)?shù)數(shù)組
Code
#include <iostream>
#include <vector>
#include <ctime>
using namespace std;
vector <int> sieve_of_eratosthenes(int n) {
vector <int> primes;
vector <bool> is_prime(n + 1, true);
is_prime[0] = is_prime[1] = false;
for (int i = 2; i <= n; i++) {
if (is_prime[i]) {
primes.push_back(i);
}
for (int j = 2; i * j <= n; j++) {
is_prime[i * j] = false;
}
}
return primes;
}
int main() {
clock_t start, end;
start = clock();
int n;
cout << "Please Enter n: ";
cin >> n;
vector <int> primes = sieve_of_eratosthenes(n);
cout << "Primes: ";
for (int prime : primes) {
cout << prime << " ";
}
cout << "\n素?cái)?shù)個(gè)數(shù)為" << primes.size() << "個(gè)\n";
end = clock();
cout << "The run time is: " << (double)(end - start) / CLOCKS_PER_SEC << "s" << endl;
return 0;
}
運(yùn)行結(jié)果

埃式篩法判斷某一個(gè)數(shù)字是否為素?cái)?shù)
Code
#include <iostream>
#include <vector>
#include <ctime>
using namespace std;
// 埃式篩法求解素?cái)?shù)
bool sieve_of_eratosthenes(int n) {
vector <bool> is_prime(n + 1, true);
is_prime[0] = is_prime[1] = false;
for (int i = 2; i <= n; i++) {
if (is_prime[i] && i == n) {
return true;
}
for (int j = 2; i * j <= n; j++) {
is_prime[i * j] = false;
if (i * j == n) {
return false;
}
}
}
}
int main() {
clock_t start, end;
start = clock();
int n;
cout << "Please Enter n: ";
cin >> n;
if (sieve_of_eratosthenes(n)) {
cout << n << "是素?cái)?shù)!!!";
}
else {
cout << n << "不是素?cái)?shù)...";
}
end = clock();
cout << "The run time is: " << (double)(end - start) / CLOCKS_PER_SEC << "s" << endl;
return 0;
}
運(yùn)行結(jié)果


到此這篇關(guān)于C++利用用埃式篩法求解素?cái)?shù)的文章就介紹到這了,更多相關(guān)C++求解素?cái)?shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++可調(diào)用對(duì)象callable object深入分析
所謂的callable object,表示可以被某種方式調(diào)用其某些函數(shù)的對(duì)象。它可以是:一個(gè)函數(shù)、一個(gè)指向成員函數(shù)的指針、一個(gè)函數(shù)對(duì)象,該對(duì)象擁有operator()、一個(gè)lambda表達(dá)式,嚴(yán)格的說(shuō)它是一種函數(shù)對(duì)象2022-08-08
Qt中集成并使用SQLite數(shù)據(jù)庫(kù)的超完整指南
這篇文章主要介紹了Qt中集成并使用SQLite數(shù)據(jù)庫(kù)的相關(guān)資料,包括環(huán)境配置、連接數(shù)據(jù)庫(kù)、執(zhí)行SQL操作、事務(wù)處理、使用模型-視圖編程、錯(cuò)誤處理、高級(jí)技巧與注意事項(xiàng)以及常見(jiàn)問(wèn)題解答,需要的朋友可以參考下2025-04-04
一篇文章帶你了解C語(yǔ)言--數(shù)據(jù)的儲(chǔ)存
這篇文章主要介紹了C語(yǔ)言數(shù)據(jù)的存儲(chǔ)和取出詳細(xì)講解,作者使用圖文代碼實(shí)例講解,有感興趣的同學(xué)可以學(xué)習(xí)研究下,希望能給你帶來(lái)幫助2021-08-08
C++獲取文件哈希值(hash)和獲取torrent(bt種子)磁力鏈接哈希值
這二個(gè)代碼一個(gè)是獲取文件哈希值的,另外一個(gè)是獲取torrent文件磁力鏈接的哈希值2013-11-11
C語(yǔ)言實(shí)現(xiàn)查詢自動(dòng)售貨機(jī)中的商品價(jià)格【實(shí)例分享】
本文主要介紹了C語(yǔ)言實(shí)現(xiàn)查詢自動(dòng)售貨機(jī)中的商品價(jià)格的相關(guān)資料。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧2017-04-04

