Sicily 1561 PRIME
先用筛法求素数的方法打表, 然后再进行查找, 哈哈, 这是第一个排名第三的程序呀!
筛法求素数参考了找质数算法(Sieve of Eratosthenes筛法), 这里有说明了筛法求素数的原理, 非常不错!
PRIME
/*function isPrime(x: integer): boolean;
var i: integer;
begin
i:=1;
while list[i]*list[i]<=x do begin
if x mod list[i]=0 then begin
result:=false;
exit;
end;
inc(i);
end;
result:=true;
end;
*/
#include <stdio.h>
#include <math.h>
#define MAXLEN 110010
int isPrime[MAXLEN];
int prime[10000];
void sieve(int arr[], int len)
{
int i, j;
int sqrt_len = sqrt(len);
for(i = 2; i < len; i++)
arr[i] = 1;
for(i = 2; i < sqrt_len; i++)
{
if (arr[i])
{
for (j = i; j*i <= len; j++)
arr[j * i] = 0;
}
}
int cnt = 0;
prime[0] = 1;
for(i = 2; i < len; i++)
{
if(arr[i] == 1)
{
prime[++cnt] = i;
if(cnt == 10000)
break;
}
}
}
int main()
{
sieve(isPrime, MAXLEN);
int n;
scanf("%d", &n);
printf("%d\n", prime[n]);
return 0;
}