第n个素数到第m个素数之间所有的素数的和


#include
int main()
{    int m,n,i,j,p=1,q,k;
    int sum=0;
    scanf("%d%d",&n,&m);
    int a[200]={2,3,5};
    for(i=3;i<=200;i++)        
        {for(k=6;k<=2000;k++)       
            {p=1;
            for(j=2;jif(k%j==0)
                    {p=0;
                    break;
                    }
                }
            if(p==1)
                {a[i]=k;
                }
            }
        }
    for(q=n-1;q<=m-1;q++)  
        {sum=sum+a[q];
        }    
    printf("%d",sum);
    return 0;
}

题目内容:

我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推。

现在,给定两个整数n和m,0

输入格式:

两个整数,第一个表示n,第二个表示m。

输出格式:

一个整数,表示第n个素数到第m个素数之间所有的素数的和,包括第n个素数和第m个素数。

输入样例:
2 4
输出样例:
15

调试为什么n会变成1999


#include<stdio.h>
#include<math.h>
 
int isPrime(int x); //判定x是否为素数
int main(void){
    int N = 0, M = 0;   
    int i = 2, cnt = 0, sum = 0;    //i为自增变量,cnt为计数器,sum为素数之和
    scanf("%d %d", &N, &M);
    while(cnt < M){   //当计数器达到区间最大值时结束循环
        if( isPrime(i) ){   //如果i是素数,则计数器加1
            cnt++;
            if(cnt >= N){
                sum = sum + i;
            }
        }
        i++;
    }
    printf("%d", sum);
    return 0;
}
//判断x是否为素数,若是素数则返回1,否则返回0
int isPrime(int x){
    int isPrimeOrNot = 1;
    int i = 2;
    for(i = 2; i <= sqrt(x); i++){
        if( x % i == 0 ) {  //若只能被1和自身整除,则为素数,否则不是素数,任何数都能被1整除,因此无须判断1
            isPrimeOrNot = 0;
            break;
        }
    }
    return isPrimeOrNot;
}