PAT 1013 数素数 (筛法求素数 难度1) - 详细题解

PAT 1013 数素数 (筛法求素数 难度1) - 详细题解_第1张图片
题目还是很简单的, 学会用筛法求素数就好了. 先写个demo找到第10000个素数是104729

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
#define ms(x, n) memset(x,n,sizeof(x));
typedef  long long LL;
const LL maxn = 104729;

bool isPrime[maxn];
int primeNum[maxn];
void getPrime()
{
    ms(primeNum, 0);
    for(int i = 2; i <= maxn; i++)
        if(!isPrime[i])
            for(int j = 2; i*j <= maxn; j++)
                isPrime[i*j] = 1;
    int tag = 1;
    for(int i = 2; i <= maxn; i++)
        if(!isPrime[i])
            primeNum[tag++] = i;
}
int main()
{
    getPrime();
    int m, n;
    cin >> m >> n;
    int tag = 0; //是否是第一个数
    for(int i = primeNum[m]; i <= primeNum[n]; i++){
        if(!isPrime[i]){
            if(tag==0) printf("%d",i), tag++;
            else printf(" %d",i), tag++;
            if(tag==10)
                printf("\n"), tag = 0;
        }
    }
	return 0;
}

你可能感兴趣的:(水题)