C ++:找到大于给定整数的第一个素数

时间:2016-08-06 21:22:33

标签: c++

问题:对于给定的整数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;
}
然而,我正在努力解决从这一点开始的问题。

2 个答案:

答案 0 :(得分:2)

您有一个功能is_prime(n)和一个号码n,并且您希望返回最小的数字q,以便is_prime(q)==truen <= q:< / p>

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 ++代码,它是伪代码)

答案 1 :(得分:0)

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

要解决投射问题,您可能需要添加此修复程序。