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;
}
原文地址:https://www.cnblogs.com/platero/p/1871261.html