以下是使用埃式筛法写的C++程序,函数返回一个指向素数数组的指针:

#include <iostream>

int* sieveOfEratosthenes(int n, int& size) {
    bool* primes = new bool[n + 1];
    std::memset(primes, true, sizeof(bool) * (n + 1));
    
    primes[0] = primes[1] = false;
    
    for (int p = 2; p * p <= n; ++p) {
        if (primes[p]) {
            for (int i = p * p; i <= n; i += p) {
                primes[i] = false;
            }
        }
    }
    
    int count = 0;
    for (int i = 2; i <= n; ++i) {
        if (primes[i]) {
            ++count;
        }
    }
    
    int* result = new int[count];
    int index = 0;
    for (int i = 2; i <= n; ++i) {
        if (primes[i]) {
            result[index++] = i;
        }
    }
    
    delete[] primes;
    size = count;
    return result;
}

int main() {
    int n = 100;
    int size;
    int* primes = sieveOfEratosthenes(n, size);
    
    std::cout << "Prime numbers up to " << n << " are: ";
    for (int i = 0; i < size; ++i) {
        std::cout << primes[i] << " ";
    }
    
    delete[] primes;
    
    return 0;
}

这个程序使用埃式筛法来找到小于等于给定数字n的所有素数。它首先创建一个布尔类型的数组primes,用来表示每个数字是否为素数。然后,它从2开始,将所有的倍数标记为非素数。最后,它遍历数组,将为素数的数字存入一个动态分配的整数数组中,并返回该数组的指针

使用埃式筛法写一个c++筛素数的程序并不使用vector但要求函数返回素数内容或指针

原文地址: https://www.cveoy.top/t/topic/ivUD 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录