【C++问题】第n小素数 答疑

时间限制: 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;
}


img