Chinaunix首页 | 论坛 | 博客
  • 博客访问: 287379
  • 博文数量: 41
  • 博客积分: 2630
  • 博客等级: 少校
  • 技术积分: 702
  • 用 户 组: 普通用户
  • 注册时间: 2007-09-30 15:56
文章分类

全部博文(41)

文章存档

2012年(2)

2011年(2)

2010年(3)

2009年(26)

2008年(8)

我的朋友

分类: C/C++

2009-03-18 17:35:24

Fibonacci和公约数公倍数算法见 斐波那契数列和公约数算法

/* 扫描[left, right]内的所有素数,返回个数
   方法:考虑跳过2和3的倍数,6n+1~6n+5中只需测试6n+1和6n+5
   [reference] http://blog.csdn.net/redraiment/archive/2008/01/29/2071998.aspx
*/

int filter_prime(int result[], int left, int right)
{
 int j, count = 0;

 if (left > right || right <= 1)
  return 0;

 if (left<=2 && right>=2)
  result[count++] = 2;

 if (left<=3 && right>=3)
  result[count++] = 3;

 int test = 5, inc = 2;
 while (test < left)
 {
  test += inc;
  inc = 6-inc;
 }

 while (test <= right)
 {
  int flg = 1;
  for (j = 2; j*j <= test; ++j)
  {
   if (0 == test%j)
   {
    flg = 0;
    break;
   }
  }

  if (1 == flg)
   result[count++] = test;

  test += inc;
  inc = 6 - inc;
 }

 return count;
}

/* 简单判断是否为素数,适合num为小数的情况
   是返回1, 否返回0
*/

int is_prime(int num)
{
 if (num <= 1)
  return 0;

 if (num==2 || num==3)
  return 1;

    int i;
    for (i = 2; i*i <= num; i++)
    {
        if ( 0 == num%i)
            return 0;
    }

    return 1;
}

阅读(1433) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2009-03-22 18:04:27

硕 is here. 不错啊,以后经常过来看看