7-68 n以内素数个数

发布时间:2024年01月24日

请统计出n以内所有的素数个数。

输入格式:

请给出最大整数以内的一个数字n。

输出格式:

输出n以内素数的个数。

输入样例:

在这里给出一组输入。例如:

1000

输出样例:

在这里给出相应的输出。例如:

168

?

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

// 统计n以内的素数个数
int count_primes(int n) {
    if (n <= 1) return 0;

    // 创建一个布尔数组,用于标记每个数字是否为素数
    bool *is_prime = (bool*)malloc((n + 1) * sizeof(bool));
    for (int i = 2; i <= n; ++i) {
        is_prime[i] = true; // 初始化所有数字为素数
    }

    // 使用埃拉托斯特尼筛选法,将合数标记为非素数
    for (int i = 2; i * i <= n; ++i) {
        if (is_prime[i]) {
            for (int j = i * i; j <= n; j += i) {
                is_prime[j] = false;
            }
        }
    }

    // 统计素数个数
    int count = 0;
    for (int i = 2; i <= n; ++i) {
        if (is_prime[i]) {
            count++;
        }
    }

    // 释放动态分配的内存
    free(is_prime);

    return count;
}

int main() {
    int n;
    scanf("%d", &n);
    int result = count_primes(n);
    printf("%d\n",result);

    return 0;
}

?

文章来源:https://blog.csdn.net/2402_82561397/article/details/135705550
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。