C语言 描述 编写函数fun,计算从l到r之间的所有素数,除去最大和最小的素数后,求和 输入 两个数l和r 输出 除去最大和最小的素数后,求和
时间: 2023-05-23 21:01:54 浏览: 162
以下是函数fun的代码:
```c
#include <stdio.h>
int isPrime(int n) {
if (n < 2) return 0;
for (int i = 2; i <= n / i; ++i) {
if (n % i == 0) return 0;
}
return 1;
}
int fun(int l, int r) {
int sum = 0;
int minPrime = r, maxPrime = l;
for (int i = l; i <= r; ++i) {
if (isPrime(i)) {
if (i < minPrime) minPrime = i;
if (i > maxPrime) maxPrime = i;
sum += i;
}
}
sum -= minPrime + maxPrime;
return sum;
}
int main() {
int l, r;
scanf("%d %d", &l, &r);
printf("%d\n", fun(l, r));
return 0;
}
```
输入两个数l和r,输出除去最大和最小的素数后,求和。注意,在这个函数中,我们先遍历一遍[l,r]中的素数,找到最大的和最小的素数,然后再将它们减去。
相关问题
用c语言编写函数fun是根据输入n,求下面分母为n以内(包含n)的素数构成的数列的和s=(1/2)-(2/3)+(3/5)-(4/7)+(5/11)......
分析:
题目要求求出分母为n以内的素数构成的数列的和,那么我们可以先用一个函数判断一个数是否为素数,然后再在主函数中遍历1到n的数,如果是素数则累加到最终的和中。
具体实现如下:
```c
#include <stdio.h>
// 判断一个数是否为素数
int isPrime(int n) {
if (n <= 1) {
return 0;
}
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) {
return 0;
}
}
return 1;
}
// 求分母为n以内的素数构成的数列的和
double fun(int n) {
double sum = 0.0;
int flag = 0; // 用于判断当前是加还是减
for (int i = 2; i <= n; i++) {
if (isPrime(i)) { // 如果是素数
if (flag == 0) {
sum += (double)1 / i;
flag = 1;
} else {
sum -= (double)i / (i + 1);
flag = 0;
}
}
}
return sum;
}
int main() {
int n;
printf("请输入n:");
scanf("%d", &n);
double s = fun(n);
printf("分母为n以内的素数构成的数列的和为:%.2lf\n", s);
return 0;
}
```
注意事项:
1. 本题需要用到浮点数,因此要将分母和分子强制转换为double类型;
2. 在求和的过程中需要判断当前是加还是减,可以用一个flag变量来实现。
阅读全文