用C++編寫的素數判定程序

一、常見的素數判定算法

素數判定是數論中的基礎問題,一般常用的算法有:試除法、埃氏篩、線性篩等。

試除法:對於一個數n,從2開始只要能整除n,n就不是素數。

比如259,因為能被7整除,所以不是素數。

這個算法簡單,容易實現,但是當n很大時,需要進行很多次除法操作,效率比較低。

埃氏篩:將從2開始的所有自然數入列,取出隊首的數p,將p的倍數依次排除,直到隊列為空,則不在這個過程中被篩去的數便是素數。

比如100以內的素數:2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97。

線性篩:試除法的時間複雜度為O($\sqrt n$),埃氏篩的時間複雜度為O(nloglogn),而線性篩法的時間複雜度為O(n)。其基本思想是:
如果x是質數,那麼x的倍數一定不是質數;如果x不是質數,那麼x一定是之前某個質數的倍數,它已經在這個質數的篩法中被標記過了。

void get_prime(int n) {
    memset(v, 0, sizeof(v));
    memset(prime, 0, sizeof(prime));
    int cnt = 0;
    for(int i = 2; i <= n; i++) {
        if(v[i] == 0) {
            prime[cnt] = i;
            cnt++;
        }
        for(int j = 0; j < cnt && i * prime[j] <= n; j++) {
            v[i * prime[j]] = 1;
            if(i % prime[j] == 0) break;
        }
    }
}

二、C++的相關語法

C++是一種高級的程序設計語言,它結合了高級語言和低級語言的優點,可以進行高效的系統級編程和高級應用程序開發。下面介紹一些C++常用的語法。

1. 變量:變量是用於存儲值的內存位置。在C++中,變量必須在使用之前被聲明。變量的聲明語法:類型 變量名;

2. if語句:if語句用於在程序中執行不同的動作,根據條件執行不同的代碼塊。if語句的語法:

if(condition) {
    // code if condition is true
}

3. for循環:for循環是一種循環結構,可以重複執行一定的代碼,直到達到指定的次數。for循環的語法:

for(initialization; condition; updation) {
    // code
}

4. 函數:函數是一種獨立的代碼塊,可以被多次調用。在C++中,函數的聲明必須在使用之前。函數的語法:

type function_name(type parameter1, type parameter2,...) {
    // code
    return value;
}

三、基於C++的素數判定程序實例

下面是一個基於C++的素數判定程序實例。這個程序使用了線性篩法來判定素數。

#include 
using namespace std;

const int MAXN = 1000000;

int prime[MAXN], v[MAXN], cnt;

void get_prime(int n) {
    memset(v, 0, sizeof(v));
    memset(prime, 0, sizeof(prime));
    cnt = 0;
    for(int i = 2; i <= n; i++) {
        if(v[i] == 0) {
            prime[cnt] = i;
            cnt++;
        }
        for(int j = 0; j < cnt && i * prime[j] <= n; j++) {
            v[i * prime[j]] = 1;
            if(i % prime[j] == 0) break;
        }
    }
}

bool is_prime(int n) {
    if(n < 2) return false;
    for(int i = 2; i * i <= n; i++) {
        if(n % i == 0) return false;
    }
    return true;
}

int main() {
    int x = 37;
    if(is_prime(x)) {
        cout << x << " is a prime number." << endl;
    } else {
        cout << x << " is not a prime number." << endl;
    }
    get_prime(100);
    for(int i = 0; i < cnt; i++) {
        cout << prime[i] << " ";
    }
    cout << endl;
    return 0;
}

四、總結

本文主要介紹了素數判定的常見算法,包括試除法、埃氏篩和線性篩法。同時,也介紹了C++的一些基本語法以及一個基於C++的素數判定程序實例。對於初學者來說,這些知識是入門必備的。通過學習這些算法和語法,可以讓我們更好地理解程序設計的本質並提高代碼的效率。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/286711.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-23 03:48
下一篇 2024-12-23 03:48

相關推薦

  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智能、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29
  • Python程序文件的拓展

    Python是一門功能豐富、易於學習、可讀性高的編程語言。Python程序文件通常以.py為文件拓展名,被廣泛應用於各種領域,包括Web開發、機器學習、科學計算等。為了更好地發揮P…

    編程 2025-04-29
  • 用不同的方法求素數

    素數是指只能被1和自身整除的正整數,如2、3、5、7、11、13等。素數在密碼學、計算機科學、數學、物理等領域都有着廣泛的應用。本文將介紹幾種常見的求素數的方法,包括暴力枚舉法、埃…

    編程 2025-04-29
  • Python購物車程序

    Python購物車程序是一款基於Python編程語言開發的程序,可以實現購物車的相關功能,包括商品的添加、購買、刪除、統計等。 一、添加商品 添加商品是購物車程序的基礎功能之一,用…

    編程 2025-04-29
  • 爬蟲是一種程序

    爬蟲是一種程序,用於自動獲取互聯網上的信息。本文將從如下多個方面對爬蟲的意義、運行方式、應用場景和技術要點等進行詳細的闡述。 一、爬蟲的意義 1、獲取信息:爬蟲可以自動獲取互聯網上…

    編程 2025-04-29
  • Vb運行程序的三種方法

    VB是一種非常實用的編程工具,它可以被用於開發各種不同的應用程序,從簡單的計算器到更複雜的商業軟件。在VB中,有許多不同的方法可以運行程序,包括編譯器、發佈程序以及命令行。在本文中…

    編程 2025-04-29
  • Python一元二次方程求解程序

    本文將詳細闡述Python一元二次方程求解程序的相關知識,為讀者提供全面的程序設計思路和操作方法。 一、方程求解 首先,我們需要了解一元二次方程的求解方法。一元二次方程可以寫作: …

    編程 2025-04-29
  • 如何使用GPU加速運行Python程序——以CSDN為中心

    GPU的強大性能是眾所周知的。而隨着深度學習和機器學習的發展,越來越多的Python開發者將GPU應用於深度學習模型的訓練過程中,提高了模型訓練效率。在本文中,我們將介紹如何使用G…

    編程 2025-04-29
  • Web程序和桌面程序的區別

    Web程序和桌面程序都是進行軟件開發的方式,但是它們之間存在很大的區別。本文將從多角度進行闡述。 一、運行方式 Web程序運行於互聯網上,用戶可以通過使用瀏覽器來訪問它。而桌面程序…

    編程 2025-04-29

發表回復

登錄後才能評論