zoukankan      html  css  js  c++  java
  • [Project Euler] 来做欧拉项目练习题吧: 题目010

                                         [Project Euler] 来做欧拉项目练习题吧: 题目010

                                                                      周银辉 

    问题描述:

    he sum of the primes below 10 is 2 + 3 + 5 + 7 = 17.

    Find the sum of all the primes below two million. 

    问题分析:

    求小于2000000的所有素数之和。

    非常简单,还记得第7题的“筛法求素数”吧, 采用相同的方法就可以了,在建立素数缓冲区的过程中随便累计一下就是该题的答案了。

    #include <stdio.h>
    #include <stdlib.h>
    long long getSum(int n)
    {
    long long sum = 0;
    char *array=(char*) malloc(n+1);
    int i;
    for(i=0; i<n+1; i++)
    {
    array[i]='r';   //'r' : remain
    }
    array[0]='d';         //'d' : delete
    array[1]='d';
    int p=2;
    while(p*p<=n)
    {
    if(array[p]=='r')
    {
    int j;
    for(j=2; j*p<=n; j++)
    {
    array[j*p]='d';
    }
    }
    p++;
    }
    for(p=2; p<=n; p++)
    {
    if(array[p]=='r')
    {
    sum += p;
    }
    }
    free(array);
    return sum;
    }
    int main()
    {
    int max=2000000;
    long long sum = getSum(max);
    printf("sum of the prime numbers under %d is %lld\n", max, sum);
    return 0;
    }

    注:当完成题目后,对于某些题,官方网站会给出参考答案,在我的博客里不会将官方答案贴出来,仅仅会写下我自己当时的思路,除非两者不谋而合。另外,如果你有更好的思路,请留言告诉我,我非常乐意参与到讨论中来。

  • 相关阅读:
    变量的创建和初始化
    HDU 1114 Piggy-Bank (dp)
    HDU 1421 搬寝室 (dp)
    HDU 2059 龟兔赛跑 (dp)
    HDU 2571 命运 (dp)
    HDU 1574 RP问题 (dp)
    HDU 2577 How to Type (字符串处理)
    HDU 1422 重温世界杯 (dp)
    HDU 2191 珍惜现在,感恩生活 (dp)
    HH实习 acm算法部 1689
  • 原文地址:https://www.cnblogs.com/zhouyinhui/p/1953995.html
Copyright © 2011-2022 走看看