时间限制: 1000ms 内存限制: 65536kB
描述
输入一个正整数n,求第n小的质数。
输入
一个不超过10000的正整数n。
输出
第n小的质数。
样例输入
10
样例输出
29
我的答案
#include
using namespace std;
int sushu(int a){
for(int i=2;i<=sqrt(a);i++){
if(a%i==0) return 0; //不是素数则返回0
}
return 1; //是素数则返回1
/* 若已在循环里返回了值,则后面的一个自动忽略 */
}
int main()
{
int n;
cin>>n;
int i=2;
while((i<=10000)&&(n>0)){
if(sushu(i)==1) n--;
i++;
}
i--;
cout<
在noi openjudge上提交给判的是wrong answer
想知道哪里有问题
请大家帮忙解答一下
把while循环的条件里的i<=10000去掉即可,因为题目是要求n<=10000,而不是质数测试变量i<=10000(如果有这个条件,测试质数的变量i最后打印的值不会超过10000,这与最多求第10000小的质数显而易见是矛盾的,因为10000不会是第10000小的质数),所以去掉这个条件即可,修改如下:
#include<bits/stdc++.h>
using namespace std;
int sushu(int a){
for(int i=2;i<=sqrt(a);i++){
if(a%i==0) return 0; //不是素数则返回0
}
return 1; //是素数则返回1
/* 若已在循环里返回了值,则后面的一个自动忽略 */
}
int main()
{
int n;
cin>>n;
int i=2;
while(n>0){
if(sushu(i)==1) n--;
i++;
}
i--;
cout<<i;
}