求问一个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 .

c++中求质数
void zhishu(int);int main(){ int i,m,n;printf("请输入一个数用来求1到这个数之间的所有的质数:\\n");scanf("%d",&i);printf("1到%d之间的所有质数为:\\n",i);for (m=2;m<=i;m++){ zhishu(m);} printf("\\n");return 0;} void zhishu(int m){ int a;bool zhishuzhi;...

求一个求质数的程序C++
double duration = (double)(clock() - tstart) \/ CLOCKS_PER_SEC;printf(">%7.3f秒\\t计算到%11I64u\\t查出素数:%10I64u个\\n", duration, nMax, PrimeCnt);} int main(){ int i, j, p;\/\/ unsigned int QRT; \/\/the square root of the end of current block \/\/ unsigned int S...

c++几个简单的问题,大虾帮帮哦
1.因为char是一个字节表示的,100表示小写字母c,他的整数形式是100,当c1*c2时,经过类型转后为int形,所以就是100*100=10000。2.因为char的取值范围是0-127,所以二进制只有8位,258的2进制值为100000010,c只能取到后8位,后8位是00000010,值是2,c的值又赋给了b,所以b是2.3.不能这样...

一道C++编程题目,求大神帮忙,有没有简单点的算法,求程序!!答得好可以...
1.对于第八列,和计算完成后,不管找没找到值,寻找当前列下一行(即i+1),无需进入下一列;2.对于非第八列,有两种情况:a.和大于等于最大值10(如果矩阵中有零值存在,此处应为大于10),不满足路径条件,没必要进入下一列计算,进入当前列下一行进行计算(即i+1);b.满足条件,则进入下一...

急急急,C++:素数问题,求大家指点指点,谢谢了,下面有我打的代码,错误提...
C++支持函数重载,编译器不知道该把int转成那种类型。指定个强制类型转换即可。比如:for(i=2;i<=(int)sqrt((double)z);i++)

C++ 求助简单质数问题,改写成【bool isPrime(int n)】
你好,很高兴为你解答:include <iostream> include <iomanip> using namespace std;bool is_prime(int n);int main(){ for(int i=1;i<100;i++){ if(is_prime(i))cout<<i<<endl;} getchar();return 0;} bool is_prime(int n){ if(n==1)return false;for(int i=2;i*i<=n;...

C++字符串小问题,请大家帮个忙,很简单
a的长度不用传递;void main(){ char a[30]="abc",b[]="efg";strcat(a,b);printf("%s\\n",a);} 结果输出 abcefg 你那函数返回的只能是个char类型的数据,你返回了个char[30],这是不能实现的,c[30]只在子函数里存在,i不用再加1了,第一个for循环后,i已经是字符尾部了。

一道简单的C++题目
我认为答案应该是2 t=1,t+5,t++;可能你不了解它的执行顺序,所以导致你迷惑吧!这个涉及运算符的优先级,你可以去查相关资料,了解这方面的知识,这里不多说了,直接告诉你吧,这里“=”优先级大于“ , ”,所以先执行赋值语句t=1,然后是两个逗号,根据相同符号优先级相等从左到右的原则,应该...

求C++编程 质因数分解...
using namespace std;void main(){ int a,b,c,d,f;cin >>a >>b;for(int i=a; i<=b; i++){ cout <<i <<"=";c=i, d=2, f=1;while(c>d){ if(c%d==0){ if(f){ cout <<d;f=0;}else cout <<"*" <<d;c\/=d;}else d++;} if(f==0)cout <<"*";cout ...

请用C++编写一个程序:找到2~100中所有的质数。(素数) 一行一个素数
include <iostream> using namespace std;int main(){ int m,i,k,n=0;\/*n作计数器*\/ for(m=1;m<=100;m=m+2){ k=1;\/\/标志变量,预设为1,一旦变成0表示不是素数 for(i=2;i<=m\/2;i++)if(m%i==0){ k=0;break;} if(k==1)cout << m << (++n%10==0?'\\n':'\\...

相似回答
大家正在搜