[Project Euler] Problem 7

By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we can see that the 6th prime is 13.

What is the 10001st prime number?

求第10001个素数。

求素数有很多种方法

最直接的方法就是看这个数能不能整除2~sqrt(该数);

而查表法能做更少的运算,如果一个数不能被小于它的素数整除的话,那么该数就是素数。

如23不能被2,3,5,7,11,13,17,19整除。

更进一步,一个数不能被2~sqrt(该数)中的素数整除的话,那么该数就是素数。

所以,23只要不能被2,3,5整除的话就可以说它是素数了。

   
     
#include < iostream >
using namespace std;

const int END = 10001 ;

bool isPrime( int init, int table[], int num){
for ( int i = 0 ; i < num; i ++ ){
if (table[i] * table[i] > init)
break ;
if (init % table[i] == 0 )
return false ;
}
return true ;
}

int main(){
int num = 1 ;
int primeTable[END] = { 2 };
int init = 3 ;
while (num < END){
if (isPrime(init,primeTable,num)){
primeTable[num]
= init;
num
++ ;
};
init
+= 2 ;
}
cout
<< primeTable[END - 1 ] << endl;
return 0 ;
}

你可能感兴趣的:(project)