读书人

ACM相关有关问题 筛素数算法(均摊的E

发布时间: 2012-08-21 13:00:21 作者: rapoo

ACM相关问题 筛素数算法(均摊的Eratosthenes筛 + 常数优化)
筛素数算法(均摊的Eratosthenes筛 + 常数优化)
不是很懂这段代码 求大虾指导

#include<stdio.h>
#include<string.h>
#define MAX 40
bool flag[MAX] ;
int prime[MAX/2] ;
void get_prime( int &k )
{
memset(flag , true , sizeof (flag) ) ;
int i , j ;
for ( i = 2 ; i < MAX ; i ++ )
{
if ( flag[i] ) prime[k++] = i ;
for ( j = 0 ; j < k && i * prime[j] < MAX ; j ++ )//(还有就是为啥加一个j<k这个条件) {
flag [i*prime[j]] = false ;
if ( i % prime[j] == 0 ) break ; //(特别是这段,为啥判断是这个条件) }
}
}

int main ()
{
int n , k = 0 ;
get_prime(k) ;
return 0 ;
}

还有我对这段代码的总的思路理不清 不知道是以咋样的思路写的
希望有大侠指导一下

[解决办法]
普通的筛法是:

C/C++ code
memset(flag, true, sizeof(flag));for (i = 2; i < MAX; i++){    if (!flag[i]) continue;    for (j = 2; i * j < MAX; j++)        flag[i * j] = false;} 

读书人网 >C++

热点推荐