随笔- 23  评论- 0  文章- 0 

PAT_B1013

这道题就是一道打印素数表的题目,本人使用的是筛选法,用bool数组记录是否为素数,每一次筛掉本轮数字的倍数,如果当前数字bool数组对应位置为false,则为素数。

这道题的坑是:你不知道最大第10000个素数是多大,所以数组尽量往大里开吧,其次就是格式的问题,自己调一调可就可以了

#include<iostream>
#include<stdio.h>
using namespace std;

const int MAX=1000000;
bool p[MAX]={0};  //全部列表初始化的话只能初始化为0 

int main(){
    freopen("in.txt","r",stdin);
    
    int start,end;
    int count=0;
    scanf("%d %d",&start,&end);
    for(int i=2;;++i){
        if(p[i]==false){
            count++;
            if(count>=start){
                printf("%d",i);
                if(count==end) break;
                if((count-start+1)%10==0)
                    printf("\n");
                else printf(" ");
            }
        }
        for(int j=i+i;j<=MAX;j+=i)
            p[j]=true;
    }
    
    return 0;
}

 

posted on 2019-09-01 20:26  川川——叮叮咚咚  阅读(...)  评论(... 编辑 收藏