C++利用用埃式篩法求解素數(shù)
更新時間:2023年01月04日 16:49:15 作者:Kinght_123
埃拉托斯特尼篩法,簡稱埃氏篩或愛氏篩,是一種由希臘數(shù)學家埃拉托斯特尼所提出的一種簡單檢定素數(shù)的算法。本文將利用這一算法實現(xiàn)求解素數(shù),感興趣的可以了解一下
埃式篩法
首先要了解什么式埃式篩法之前,需要知道一個定理。
就是素數(shù)的整數(shù)倍一定不是素數(shù)。
了解了這個就基本大概懂了埃式篩法。
- 首先初始化一個布爾數(shù)組is_prime,用于記錄每個數(shù)是否為素數(shù)。
- 從2開始,枚舉每個數(shù)i,如果is_prime[i]為true,則i是素數(shù),添加到素數(shù)數(shù)組primes中。
- 然后對于每個i,我們讓我擴大j倍,直到i*j小于輸入的數(shù)字n,把is_prime[i * j]賦值為false。
- 重復(fù)步驟2和3,直到遍歷到n為止。
埃式篩法求解某一個數(shù)字包含的所有素數(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素數(shù)個數(shù)為" << primes.size() << "個\n";
end = clock();
cout << "The run time is: " << (double)(end - start) / CLOCKS_PER_SEC << "s" << endl;
return 0;
}
運行結(jié)果

埃式篩法判斷某一個數(shù)字是否為素數(shù)
Code
#include <iostream>
#include <vector>
#include <ctime>
using namespace std;
// 埃式篩法求解素數(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 << "是素數(shù)!!!";
}
else {
cout << n << "不是素數(shù)...";
}
end = clock();
cout << "The run time is: " << (double)(end - start) / CLOCKS_PER_SEC << "s" << endl;
return 0;
}
運行結(jié)果


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

