POJ 3006 Dirichlet's Theorem on Arithmetic Progressions ( 素数、筛选)

来源:互联网 发布:淘宝金酷娃玩具和谐号 编辑:程序博客网 时间:2024/05/17 02:07

1.题意:求一个等差数列的第K个素数


分析:将所求范围100W中的素数全部筛选出,然后直接求解即可。


注意:在用到0,1这种判断时,bool prime[] 比 int prime[]不仅更节省内存,而且更有效率。。


#include <stdio.h>#define MAX 1000000#define bool char#define true 1#define false 0bool prime[MAX] ;void Screening ( )      //筛选法求素数{    int i ;    for ( i = 0 ; i < MAX ; i ++ )    {        prime[i] = 1 ;    }    prime[0] = prime[1] = 0 ;    prime[2] = 1 ;    for ( i = 3 ; i < MAX ; i ++ )    {        prime[i++] = 1 ;        prime[i] = 0 ;    }    for ( i = 3 ; i < MAX/2 ; i ++ )    {        if ( prime[i] )        {            int k ;            for ( k = i + i ; k < MAX ; k += i )            {                prime[k] = 0 ;            }        }    }}intmain ( ){    Screening ( ) ;    int a , d , n ;    while ( EOF != scanf ("%d%d%d" , & a , & d , & n ) )    {        if ( !a && !d && !n )        {            break ;        }        int count ;        count = 0 ;        while ( 1 )        {            if ( prime[a] )            {                count ++ ;            }            if ( count == n )            {                break ;            }            a += d ;        }        printf ("%d\n" , a ) ;    }    return 0 ;}




原创粉丝点击