首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

ACM相关有关问题 筛素数算法(均摊的Eratosthenes筛 + 常数优化)

2012-08-21 
ACM相关问题 筛素数算法(均摊的Eratosthenes筛 + 常数优化)筛素数算法(均摊的Eratosthenes筛 + 常数优化)

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;} 

热点排行