请写一个求N以内质数的函数 C语言
时间: 2024-03-09 22:49:09 浏览: 60
好的,以下是一个求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以内的所有质数。
阅读全文