用C语言编写一个函数,筛法求质数。
时间: 2023-09-23 13:06:44 浏览: 123
用C语言思想改写的用筛法求质数程序.rar_筛法 质数
### 回答1:
我可以为您提供一个简单的筛法求质数的C语言函数:int prime(int n)
{
int i, j, flag=0;
for(i=2; i<=n/2; ++i)
{
if(n%i==0)
{
flag=1;
break;
}
}
if (flag==0)
return 1;
else
return 0;
}
### 回答2:
筛法求质数是一种高效的算法,用于找出一定范围内的所有质数。下面是用C语言编写的求质数函数的示例:
```
#include <stdio.h>
#include <stdbool.h>
void sieve_of_eratosthenes(int n) {
// 创建一个标记数组,用于记录每个数字是否为质数
bool prime[n+1];
// 初始化标记数组,假设每个数字都是质数
for (int i = 0; i <= n; i++) {
prime[i] = true;
}
// 从2开始遍历,将所有的倍数标记为非质数
for (int p = 2; p * p <= n; p++) {
if (prime[p] == true) {
// p是质数,标记所有p的倍数为非质数
for (int i = p * p; i <= n; i += p) {
prime[i] = false;
}
}
}
// 打印所有的质数
printf("在%d范围内的质数有:\n", n);
for (int p = 2; p <= n; p++) {
if (prime[p]) {
printf("%d ", p);
}
}
printf("\n");
}
int main() {
int n;
printf("请输入一个正整数:");
scanf("%d", &n);
sieve_of_eratosthenes(n);
return 0;
}
```
这个函数利用了筛法(埃拉托斯特尼筛法)的原理。它首先创建了一个标记数组,假设每个数字都是质数。然后从2开始,将所有的倍数标记为非质数。最后,打印出标记数组中为真的索引,即所有的质数。
你可以在函数外部定义一个整数变量n,并将其赋值为你要求解的范围,然后调用`sieve_of_eratosthenes(n)`函数即可找出该范围内的所有质数。
### 回答3:
筛法求质数,即埃拉托色尼筛选法(Sieve of Eratosthenes),是一种用于求解一定范围内所有质数的算法。下面是用C语言实现此算法的函数。
```c
#include <stdio.h>
#include <stdbool.h>
void sieveOfEratosthenes(int n) {
bool isPrime[n+1];
memset(isPrime, true, sizeof(isPrime)); // 初始化标记数组,默认全部为true
for (int p = 2; p * p <= n; p++) {
if (isPrime[p] == true) {
for (int i = p * p; i <= n; i += p)
isPrime[i] = false; // 将p的倍数标记为非质数
}
}
// 输出所有质数
for (int p = 2; p <= n; p++) {
if (isPrime[p]) {
printf("%d ", p);
}
}
}
int main() {
int n;
printf("请输入一个正整数n:");
scanf("%d", &n);
printf("小于等于%d的所有质数为:\n", n);
sieveOfEratosthenes(n);
printf("\n");
return 0;
}
```
运行上述代码,用户输入一个正整数n,程序将输出小于等于n的所有质数。筛法求质数的基本思想是从2开始,将其所有的倍数标记为非质数,然后继续遍历,直至筛完所有小于等于n的数,剩下的即为质数。
阅读全文