Objective c 无法计算低于200万的素数之和
我正在做Euler方法项目,以找到低于200万的素数之和,我正在努力。这是我正在使用的代码。当我计算10以下和50以下的总和时,我得到了正确的值,但当我计算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;
#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