euler Problem 07(素数筛模板)

题目: 
第10001个素数 
列出前6个素数,它们分别是2、3、5、7、11和13。我们可以看出,第6个素数是13。

第10,001个素数是多少?

加注释的是 素数筛优化前的算法 

#include<iostream>
using namespace std;
const int  MAX_RANGE=150000;
int prime[MAX_RANGE] = {0}, primeList[MAX_RANGE] = {0};
//prime数组中 0代表是素数 1代表不是素数 
void getPrime2() 
{
    for (int i = 2 ; i < MAX_RANGE ; ++i)
	 {
        if (!prime[i]) 
		{
            primeList[++primeList[0]] = i;
        }
        for (int j = 1 ; j <= primeList[0] ; ++j)
		 {
            if (i * primeList[j] >= MAX_RANGE) break;//这里必须是大于等于MAX_RANGE
            prime[i * primeList[j]] = 1;//将素数的倍数标记
            if (i % primeList[j] == 0) break;
        }
    }
}
int main()
{
	getPrime2();
	cout<<("%d",primeList[10001]);
	cout<<(" ");
    //cout<<prime[101]; 用来判断101是否为素数 (0:是素数 1:不是素数)
	
}
//
//void getPrime() {
//    for (int i = 2 ; i < MAX_RANGE ; ++i) {
//        if (!prime[i]) {
//            primeList[++primeList[0]] = i;
//            for (int j = i * 2 ; j < MAX_RANGE ; j += i) {
//                prime[j] = 1;
//            }
//        }
//    }
//}

 

おすすめ

転載: blog.csdn.net/intmain_S/article/details/90414078