1013 数素数 测试点4通过不了,请教有何问题

1013 数素数 (20 point(s))

令 P​i​​ 表示第 i 个素数。现任给两个正整数 M≤N≤10​4​​,请输出 P​M​​ 到 P​N​​ 的所有素数。
输入格式:

输入在一行中给出 M 和 N,其间以空格分隔。
输出格式:

输出从 P​M​​ 到 P​N​​ 的所有素数,每 10 个数字占 1 行,其间以空格分隔,但行末不得有多余空格。
输入样例:

5 27

输出样例:

11 13 17 19 23 29 31 37 41 43
47 53 59 61 67 71 73 79 83 89
97 101 103

 #include <iostream>
#include <cmath>
using namespace std;

int main(){
    int M,N,cnt=0,k=0,j,flag=0; cin>>M>>N;
    for(int i=2;i<=100000;i++){
        for(j=2;j<=sqrt(i);j++){
            if(i%j==0)  break;  //i 不是素数 
        }
        if(j>sqrt(i)){  //i 是素数 
            cnt++;
            if(cnt>=M&&cnt<N){
                k++;
                printf("%d%c",i,k%10==0?'\n':' ');
            }
            if(cnt==N){
                cout<<i;
                flag=1;
            }   
        }
        if(flag==1) break;
    }
    return 0;
} 
c++

2个回答

for(int i=2;i<=100000;i++)
你并不知道第10000个素数是否超过了100000.问题就出在这里。

第10000个素数远大于10000,所以最好用O(1)筛法才行

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问