【问题标题】:Unable to calculate the sum of prime numbers below 2 million200万以下的素数之和无法计算
【发布时间】:2013-05-15 15:14:32
【问题描述】:

我正在做欧拉方法项目,以找到低于 200 万的素数之和,但我正在苦苦挣扎。这是我正在使用的代码。当我计算低于 10 的总和和低于 50 的总和时,我得到了正确的值,但我计算的总和低于 200 万项目欧拉说我的解决方案不正确。有什么想法吗?

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{
    @autoreleasepool {

        int p = 2, d, total;
        BOOL isPrime;
        total = 0;
        NSLog(@"%i ", p);
        for ( p = 3; p < 2e6; p += 2){
            isPrime = YES;

            for ( d = 3; isPrime == YES && d < p; d += 2)
               if ( p % d == 0)
                   isPrime = NO;

            if (isPrime == YES){
                NSLog(@"%i ", p);
                        total  += p ;}
        }
        NSLog(@"total = %i", total + 2);


    }
    return 0;
}

【问题讨论】:

    标签: objective-c boolean sum primes nested-loops


    【解决方案1】:

    此函数使用埃拉托色尼筛法对小于 n 的素数求和:

    function sumPrimes(n)
        sum := 0
        sieve := makeArray(2..n, True)
        for p from 2 to n step 1
            if sieve[p]
                sum := sum + p
                for i from p * p to n step p
                    sieve[i] := False
        return sum
    

    我会留给你用合适的数据类型翻译成 Objective-C。对于 n = 2000000,这应该在一两秒内运行。

    【讨论】:

      【解决方案2】:

      有几个错误。第一个是你溢出了。使用 long 而不是 int。第二件事只是性能提升。将 for 循环从 p

      【讨论】:

        猜你喜欢
        • 2014-05-23
        • 1970-01-01
        • 2013-05-28
        • 2011-05-21
        • 1970-01-01
        • 2020-11-12
        • 2018-03-14
        相关资源
        最近更新 更多