[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;
}