求问一个c++很简单的问题QAQ(质数和)谢谢~

题目:
Description某人最近在研究质数,他想知道,对于给定的一个区间,其中所有质数的和是多少。
比如,给定的区间是3到10,在这个区间中有质数3,5,7,所以总和是15
某人提出了n个形如“x y”的提问,也就是询问从x到y这个区间中的质数和。请你快速回答出所有问题。
Input第一行输入一个正整数n,表示总共有n个询问
接下来n行,每行两个正整数x和y,表示询问的区间(x<=y)。
Outputn行,每行一个整数,表示对应询问的答案。
Sample Input3
3 10
15 28
2 13Sample Output15
59
41Hint3到10区间中的质数有3,5,7,总和为15
15到28的区间中的质数有17,19,23,总和为59
2到13区间中的质数有2,3,5,7,11,13
1<=n<=100,000
1<=x<=y<=10,000

【下面是我写的代码,但答案就是不对啊TAT,求教,很简单的一道题,谢谢!】

#include <iostream>
#include <cmath>
using namespace std;
int s1[100005],s2[100005],k;
void zs(int x)
{ int i;
for(i=2;i<sqrt(x);i++) //判断是否为质数
{if(x%i!=0)k=1; //k为1,则为质数,反之不为质数
else k=0;}
}
int main()
{
int x,y,n,j,i,tot=0;
cin>>n;
for(i=1;i<=n;i++)cin>>s1[i]>>s2[i];
for(i=1;i<=n;i++)
{for(j=s1[i];j<=s2[i];j++){zs(j);if(k==1){tot+=j;}} //判断是否为质数,若为质数则用total加进去
cout<<tot<<endl;tot=0;} //输出total
return 0;
}

zs函数错了。比如当x=33时,i<sqrt(33)的结果是i<5,i的取值就是2、3、4;那么,33%2时k=1,33%3时k=0,33%4时k又=1,结果最后得数是k=1,33成质数了,而33是合数!追问

但之前加break还是不对。。求教应该怎么改呀,谢谢~~~

追答

把 zs改如下看看:

void zs(int x){
    int i;
    if(x>2 && x%2==0 || x<2){
        k=0;
        return;
    }
    for(i=3;i*i<=x;i+=2)
        if(x%i==0){
            k=0;
            return;
    }
    k=1;
}

温馨提示:内容为网友见解,仅供参考
第1个回答  2015-01-19
RMQ ST .
相似回答
大家正在搜