求n以内的质数的数量

 

转载于:https://www.cnblogs.com/caijiao/p/10080105.html

好的,以下是一个N以内质数的函数示例(使用的是筛法),使用C语言实现: ```c #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <math.h> int* find_primes(int n) { // 创建一个长度为n+1的数组,用于标记是否为质数 bool *is_prime = (bool*)malloc(sizeof(bool) * (n+1)); // 0和1不是质数,标记为false is_prime[0] = false; is_prime[1] = false; // 其他数字先标记为true for (int i = 2; i <= n; i++) { is_prime[i] = true; } // 开始筛选 for (int i = 2; i <= sqrt(n); i++) { if (is_prime[i]) { // 将i的倍数标记为false for (int j = i*i; j <= n; j += i) { is_prime[j] = false; } } } // 计算质数数量 int count = 0; for (int i = 0; i <= n; i++) { if (is_prime[i]) { count++; } } // 创建一个新的数组,存储所有质数 int *primes = (int*)malloc(sizeof(int) * count); int index = 0; for (int i = 0; i <= n; i++) { if (is_prime[i]) { primes[index++] = i; } } // 释放is_prime数组 free(is_prime); // 返回所有质数 return primes; } int main() { int n = 30; int* primes = find_primes(n); printf("Primes less than or equal to %d: ", n); for (int i = 0; i < sizeof(primes)/sizeof(primes[0]); i++) { printf("%d ", primes[i]); } printf("\n"); // 释放primes数组 free(primes); return 0; } ``` 使用方法: ```c int n = 30; int* primes = find_primes(n); printf("Primes less than or equal to %d: ", n); for (int i = 0; i < sizeof(primes)/sizeof(primes[0]); i++) { printf("%d ", primes[i]); } printf("\n"); // 释放primes数组 free(primes); ``` 这个函数使用的是常见的筛法算法,可以比较快速地找到N以内的所有质数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值