Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1004129
  • 博文数量: 150
  • 博客积分: 3017
  • 博客等级: 少校
  • 技术积分: 3829
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-19 14:40
个人简介

Now in Baidu WISE team

文章分类

全部博文(150)

文章存档

2014年(8)

2013年(31)

2012年(111)

分类: C/C++

2013-01-13 17:32:02

求前n个素数的和。
codepad.org已验证。
用一个数组存储至今为止已发现的素数以降低时间复杂度。

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <memory.h>
  4. #define MAX 1000

  5. int *cache = NULL;


  6. int isPrime(int num){
  7.     if(num == 1 || num == 2) return 1;
  8.     if(cache == NULL){
  9.         cache = (int*)malloc(sizeof(int)*MAX);
  10.         memset(cache, 0 , sizeof(int)*MAX);
  11.         cache[0] = 2;
  12.     }
  13.     int i = 0;
  14.     for(;;){
  15.         if(cache[i]!=0){
  16.             if(num%cache[i] == 0)
  17.                 return 0;
  18.             else
  19.                 i++;
  20.         }
  21.                 else{
  22.                         cache[i] = num;
  23.          return 1;
  24.                 }
  25.     }
  26. }


  27. int primesum(int count){
  28.     int sum = 0;
  29.     int num = 0;
  30.     while(count>0){
  31.         num++;
  32.         if(isPrime(num)){
  33.             sum+=num;
  34.             count--;
  35.         }
  36.     }
  37.     return sum;
  38. }

  39. int main(){
  40.     printf("sum = %d \n", primesum(200));
  41. }


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