筛选法求素数(C++和Python代码)

筛选法求素数(C++和Python代码)

筛选法,又称埃拉托斯特尼筛选法(Sieve of Eratosthenes),是一种用于求解素数的简单而高效的算法。
筛选法求素数,从2开始,遍历到sqrt(n)为止(sqrt表示平方根)。为何遍历到sqrt(n)为止就可以了?
在筛选法求素数时,我们需要判断一个数是否为素数。假设我们要判断一个数n是否为素数,如果存在一个大于1且小于n的因子,那么必然存在两个因子a和b,其中a<=sqrt(n),b>=sqrt(n)。如果a和b都大于sqrt(n),那么它们的乘积ab就大于n,与假设矛盾。因此,如果在遍历到sqrt(n)之前没有找到任何小于等于sqrt(n)的因子,那么n就是素数。
举个例子,假设我们要判断一个数25是否为素数。如果我们从2开始遍历到25,我们可以发现2、3、4、5都不能整除25,但是当我们遍历到5时,我们就可以停止了,因为5的平方根是5,再大于5的数就没有必要再判断了。因为如果25有一个大于5的因子,那么它必然有一个小于等于5的因子,我们在遍历到5之前就应该找到了。
因此,遍历到sqrt(n)为止就可以了,这样可以减少不必要的计算量,提高算法的效率。

以下是求解100以内素数的C++和Python代码。

C++代码:

#include <iostream>
#include <cmath>
using namespace std; 

bool isPrime(int num) {
    if (num <= 1) {
        return false;
    }
    for (int i = 2; i <= sqrt(num); i++) {
        if (num % i == 0) {
            return false;
        }
    }
    return true;
}

int main() {
    for (int i = 2; i <= 100; i++) {
        if (isPrime(i)) {
            cout << i << " ";
        }
    }
    cout << endl;
    return 0;
}

Python代码:

import math

def is_prime(num):
    if num <= 1:
        return False
    for i in range(2, int(math.sqrt(num)) + 1):
        if num % i == 0:
            return False
    return True

for i in range(2, 101):
    if is_prime(i):
        print(i, end=" ")
print()

猜你喜欢

转载自blog.csdn.net/cnds123/article/details/133456523