题目:
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;
}
但之前加break还是不对。。求教应该怎么改呀,谢谢~~~
追答把 zs改如下看看:
void zs(int x){