zhanshen112
吉大秦少游
采纳率60%
2018-11-21 13:05 阅读 1.4k

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;
} 
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

2条回答 默认 最新

  • qq_15046309 天杪 2019-01-17 14:20

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

    点赞 1 评论 复制链接分享
  • qq_44274276 researcher-Jiang 2019-07-01 21:08

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

    点赞 1 评论 复制链接分享

相关推荐