▼页尾

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

posted @ 2011-02-22 01:21  xiatwhu  阅读(257)  评论(0编辑  收藏  举报
▲页首
西