簡體   English   中英

C ++:查找大於給定整數的第一個質數

[英]C++: find first prime number larger than a given integer

問:如何找到,對於給定的整數n ,第一個素數大於n


到目前為止我自己的工作

我設法編寫了一個程序來檢查給定的整數是否是質數:

#include <iostream>
#include <cmath>

using namespace std;

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

int main(int argc, char** argv)
{
    int i;
    while (true)
    {
        cout << "Input the number and press ENTER: \n";
        cout << "To exit input 0 and press ENTER: \n";
        cin >> i;
        if (i == 0)
        {
            break;
        }
        if (is_prime(i))
        cout << i << " is prime" << endl;
        else
        cout << i << " isn't prime'" << endl;
    }
    return 0;
}

但是,我正在努力從這一點着手。

您有一個函數is_prime(n)和一個數字n ,並且您想要返回最小的數字q這樣is_prime(q)==truen <= q

int q = n;
while (!is_prime(q)) {
    q++;
}
// here you can be sure that
// 1. q is prime
// 2. q >= n       -- unless there was an overflow

如果您想提高效率,可以顯式檢查偶數情況,並每次增加2。

這是一個通用主題的具體示例:如果您具有測試功能和用於生成元素的方法,則可以生成通過測試的元素:

x = initial_value
while (something) {
    if (test(x)) {
        // found!
        // If you only want the first such x, you can break
        break;
    }
    x = generate(x)
}

(請注意,這不是有效的C ++代碼,它是偽代碼)

int i;
**int k_koren_od_n = (int)(sqrt(n) + 0.5)**
for (i = 2; i <= k_koren_od_n ; i++){

要解決投放問題,您可能需要添加此修復程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM