1.题意:求一个等差数列的第K个素数
分析:将所求范围100W中的素数全部筛选出,然后直接求解即可。
注意:在用到0,1这种判断时,bool prime[] 比 int prime[]不仅更节省内存,而且更有效率。。
#include <stdio.h>
#define MAX 1000000
#define bool char
#define true 1
#define false 0
bool 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 ;
}
}
}
}
int
main ( )
{
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 ;
}