设计一个函数fun(m,n),其中2<=m<n,输出[m,n]之间的素数。在主函数中输入实参,调用函数。
时间: 2023-12-10 07:37:31 浏览: 39
以下是使用 Python 语言实现的代码:
```python
def fun(m, n):
"""
输出[m,n]之间的素数
"""
primes = [] # 用于存储素数的列表
for num in range(m, n+1):
if num > 1: # 1不是素数
for i in range(2, int(num**0.5)+1):
if num % i == 0:
break
else:
primes.append(num)
return primes
# 测试
m = 2
n = 20
print(fun(m, n)) # 输出 [2, 3, 5, 7, 11, 13, 17, 19]
```
函数 `fun(m, n)` 首先创建一个空列表 `primes`,用于存储素数。然后使用 `range()` 函数遍历区间 `[m, n]` 中的每个整数,对于每个整数,如果大于 1,则使用一个循环遍历从 2 到该数的平方根之间的每个整数,判断该数是否能被整除。如果能被整除,则说明该数不是素数,直接跳出循环;否则,将该数加入 `primes` 列表中。最后返回 `primes` 列表。
相关问题
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`的值即可。
设计一个函数fun(m,n),其中2<=m<n,输出[m,n]之间的素数。
好的,这是一个素数筛选的问题,可以使用埃氏筛法来解决。具体实现如下:
```
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]) {
cout << i << " ";
}
}
}
```
使用方法为调用 `fun(m, n)` 函数,其中 `m` 和 `n` 分别为要求素数的区间左右端点,输出结果为区间内的素数。