编写函数 fun ,计算从到之间的所有素数,除去最大和最小的素数后,求和

描述:
编写函数 fun ,计算从到之间的所有素数,除去最大和最小的素数后,求和
输入:
两个数和 r
输出:
除去最大和最小的素数后,求和

img


#include <stdio.h>
int IsPrime(unsigned int n);
int fun(unsigned int m, unsigned int n);
int main()
{                         
    int m = 0,n = 0,sum = 0,i = 0;
       scanf("%d",&m);
        scanf("%d",&n);
    
    sum = fun(m,n);
    printf("sum of prime numbers:%d",sum);
    return 0;
}                         
int fun(unsigned int m, unsigned int n)
{                         
    int sum = 0,i,j,max=0,min=100000;
    int isPrime;
    for(j = m; j<= n; j++)
    {                         
         isPrime = 1;
        for(i = 2; i < j; i++)
        {                         
            if(j%i==0)
            {                         
                isPrime = 0;
                break;
            }
        }
       if(isPrime==1){
            sum+=j;
            if(j>max)
            max=j;
            if(j<min)
            min=j;
       }
      
    }
    return sum-max-min;
}                         
 
 
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int fun(int m,int n){
    int i,count=0;
    int nums[1001];
    int sum = 0;
    if(m==1)
            m=2;
    
        for (i = m; i <= n; i++) {
            int isPrime = 1;
            int k;
            for (k = 2; k < i - 1; k++) {
                if (i%k == 0) {
                    isPrime = 0;
                    break;
                }
            }
    
            if (isPrime) {
                nums[count++]=i;
            }
        }
        for(int i=1;i<count-1;i++){
            sum+=nums[i];
        }
    return sum;
}
int main()
{
    int m,n;
    scanf("%d%d", &m,&n);
    printf("%d\n",fun(m,n));
    return 0;
}

因为不知道m和n的范围,所以最好不要用数组记录所有素数,只需要记录最大和最小值素数,并一直累加求和,最后用所有素数的和减去最大和最小素数即可。代码如下:

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

int fun(int m, int n)
{
    int i, k,max=0, min=0, sum = 0;
    int flag = 0;  //是否已经找到素数标记
    int isprime = 0; //素数标记
    for (i = m; i <= n; i++)
    {
        //判定i是否是素数
        isprime = 1;
        for (k = 2; k < i; k++)
        {
            if (i % k == 0)
            {
                isprime = 0;
                break;
            }
        }
        if (i < 2) isprime = 0;

        if (isprime == 1) //i是素数
        {
            if (flag == 0) //还没有素数
            {
                max = i;
                min = i;
                sum += i; //累加和(最后再减去最大和最小即可)
                flag = 1;
            }
            else
            {
                if (i > max) max = i;
                if (i < min) min = i; 
                sum += i; //累加和
            }
        }
    }
    return (sum - max - min); //返回去掉最大和最小素数后的和
}


int main()
{
    int m, n;
    int sum = 0;
    scanf("%d %d", &m, &n);
    sum = fun(m, n);
    printf("%d", sum);
    return 0;
}

img


从小到大循环找到的第一个素数是最小的,最后(最新)找到的素数是最大的
还要判断找到的素数少于3个的情况

#include <stdio.h>
int isprime(int n);
int main()
{
    int sum = 0, min, max, conut=0;
    int a,b,i,t;
    printf("请输入a b: ");
    scanf("%d%d",&a,&b);
    if (a>b) {
        t=a;
        a=b;
        b=t;
    }
    for( i=a; i<=b; i++ ) {
        if(isprime(i)){
            sum+=i;
            conut++;
            if (conut==1)
                min=i;
            max=i;
        }
    }
    if (conut>2)
        printf("除去最大和最小的素数后之和:%d", sum-min-max);
    else
        printf("素数少于3个,除去最大和最小的素数后之和:%d", 0);
    return 0;
}
int isprime(int n)
{
    int i;
    if(n<=3) return n>1;
    for(i=2;i*i<=n;i++)
        if(n%i==0) return 0;
    return 1;
}

r代表什么?

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632