问题:输出第k个素数(1<=k<=10000)。
时间要求:必须在50ms内完成计算。
实现代码:
运行结果:
[img]http://dl.iteye.com/upload/attachment/0063/3818/0858bee3-b113-36e8-83eb-2df6d49ebec7.jpg[/img]
[img]http://dl.iteye.com/upload/attachment/0063/3820/6f6bcec9-eae5-305e-9149-af9ef5a3a5c5.jpg[/img]
时间要求:必须在50ms内完成计算。
实现代码:
#define MAX 105000
unsigned long r[MAX],p[10000],n,t;
int main(){
int i,j,k,m;
for(i=0;i<MAX;++i) r[i]=i;
for(i=0;i<MAX;++i){
if(r[i]>1) {
for(j=2;j<MAX;++j)
if((t=i*j)<=MAX) r[t]=0;
else break;
}
}
for(m=i=0;i<MAX;++i){
if(r[i]>1) p[m++]=r[i];
if(m>=10000) break;
}
for(;~scanf("%d",&k);){
printf("%ld\n",p[k-1]);
}
}
运行结果:
[img]http://dl.iteye.com/upload/attachment/0063/3818/0858bee3-b113-36e8-83eb-2df6d49ebec7.jpg[/img]
[img]http://dl.iteye.com/upload/attachment/0063/3820/6f6bcec9-eae5-305e-9149-af9ef5a3a5c5.jpg[/img]