c语言编写设计一个函数fun(m,n),其中2<=m<n,输出[m,n]之间的素数。在主函数中输入实参,调用函数。
时间: 2023-12-10 18:37:32 浏览: 140
以下是一个C语言实现的fun(m,n)函数,输出[m,n]之间的素数:
```c
#include <stdio.h>
// 判断是否为素数
int isPrime(int num) {
int i;
for (i = 2; i <= num / 2; i++) {
if (num % i == 0) {
return 0; // 不是素数
}
}
return 1; // 是素数
}
void fun(int m, int n) {
int i;
for (i = m; i <= n; i++) {
if (isPrime(i)) {
printf("%d ", i);
}
}
}
int main() {
int m, n;
printf("请输入m和n(2<=m<n):");
scanf("%d %d", &m, &n);
printf("%d到%d之间的素数有:\n", m, n);
fun(m, n);
return 0;
}
```
使用方法如下:
```
请输入m和n(2<=m<n):2 30
2到30之间的素数有:
2 3 5 7 11 13 17 19 23 29
```
相关问题
C语言设计一个函数fun(m,n),其中2<=m<n,输出m~n之间的素数。
好的,可以使用埃氏筛法来实现该函数,具体实现过程如下:
1. 定义一个大小为n+1的布尔型数组prime,用来标记数字是否为素数,初始全部赋值为true。
2. 从2开始遍历到sqrt(n),如果当前数字i为素数,则将i的倍数(除了自己)在prime数组中标记为false。
3. 遍历[m,n]之间的数字,将素数输出。
下面是对应的C代码实现:
```c
#include <stdio.h>
#include <stdbool.h>
#include <math.h>
void fun(int m, int n) {
bool prime[n + 1];
memset(prime, true, sizeof(prime)); // 初始化全部为true
for (int i = 2; i <= sqrt(n); i++) {
if (prime[i]) {
for (int j = i * 2; j <= n; j += i) {
prime[j] = false; // 标记i的倍数为非素数
}
}
}
// 输出[m,n]之间的素数
for (int i = m; i <= n; i++) {
if (prime[i]) {
printf("%d ", i);
}
}
}
int main() {
int m = 2, n = 100;
fun(m, n);
return 0;
}
```
输出结果为:2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97。
如果需要输出其他范围内的素数,只需要修改`m`和`n`的值即可。
C语言设计一个函数fun(m,n),其中2<=m<n,输出[m,n]之间的素数。
好的,下面是一个使用C语言实现的素数筛选函数 `fun(m, n)`:
```c
#include <stdio.h>
#include <stdbool.h>
#include <math.h>
void fun(int m, int n) {
bool isPrime[n+1]; // 定义一个数组,用来标记是否是素数
memset(isPrime, true, sizeof(isPrime)); // 初始化为true,表示都是素数
for (int i = 2; i <= sqrt(n); i++) { // 从2开始,到n的平方根结束
if (isPrime[i]) { // 如果当前数是素数,则将其倍数标记为非素数
for (int j = i*i; j <= n; j += i) {
isPrime[j] = false;
}
}
}
for (int i = m; i <= n; i++) { // 输出[m,n]之间的素数
if (isPrime[i]) {
printf("%d ", i);
}
}
printf("\n");
}
```
使用方法为调用 `fun(m, n)` 函数,其中 `m` 和 `n` 分别为要求素数的区间左右端点,输出结果为区间内的素数。注意,需要在文件头部添加 `#include <math.h>` 来使用 `sqrt()` 函数。
阅读全文
相关推荐
















