您的位置:首页 > 其它

POJ 3006

2013-06-10 12:27 204 查看
题目大意:等差数列,要求分别输入首项a,差值d,以及n(n为输出的的第n个素数)。

方法:先用筛选法列出2--1000000的素数表,再利用prime[a+i*d]判断a+i*d是否为素数即可。用j记录素数数目,当j==n是输出即可。(筛选法详见POJ
2262)

于是,贴代码:

#include<stdio.h>

#define MAX
1000001

int prime[MAX]={0};

void getprime()//筛选法筛选素数,制成素数表

{

int i,j;

prime[0]=prime[1]=1;

for(i=2;i<=MAX/2;i++)

if(!prime[i])

for(j=2;i*j<MAX;j++)

prime[i*j]=1;

}

int main()

{

int a,d,n,i,j;

getprime();

while(scanf("%d %d %d",&a,&d,&n)&&(a!=0||d!=0||n!=0))

{

for(i=0,j=0;a+i*d<MAX;i++)

{

if(!prime[a+i*d])j++;//直接对应素数表效率高

if(j==n)break;

}

printf("%d\n",a+i*d);

}

return 0;

}

以上。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: