Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 无法计算低于200万的素数之和_Objective C_Boolean_Sum_Primes_Nested Loops - Fatal编程技术网

Objective c 无法计算低于200万的素数之和

Objective c 无法计算低于200万的素数之和,objective-c,boolean,sum,primes,nested-loops,Objective C,Boolean,Sum,Primes,Nested Loops,我正在做Euler方法项目,以找到低于200万的素数之和,我正在努力。这是我正在使用的代码。当我计算10以下和50以下的总和时,我得到了正确的值,但当我计算200万以下的总和时,欧拉项目说我的解决方案不正确。有什么想法吗 #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { int p = 2, d, total;

我正在做Euler方法项目,以找到低于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;
}
#导入
int main(int argc,const char*argv[]
{
@自动释放池{
int p=2,d,总计;
BOOL-isPrime;
总数=0;
NSLog(@“%i”,p);
对于(p=3;p<2e6;p+=2){
isPrime=是;
对于(d=3;isPrime==YES&&d
此函数使用Eratosthenes筛对小于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,这应该在一两秒钟内运行。

有几个错误。第一个是你满溢了。使用long而不是int。第二件事就是提高性能。将for循环从p<2e6更改为p*p