环境:Xcode7.2
目的:以最快的方式(目前我觉得时最快的)计算出1到1,000,000之间的所有质数。大概2.5秒,求指正。
// 质数:2、3、5、7...
// 装质数的数组,预存一个质数(3)
NSMutableArray * array = [NSMutableArray array];
array = @[@"3"].mutableCopy;
// 从3开始,所有质数均是奇数
NSInteger i = 3;
NSLog(@"%ld",i);
// while循环
while (i <= 1000000) {
// 判断是否是质数的计数
NSInteger num = 0;
// 循环每一个小于当前i的质数
for (NSString * j in array) {
// i % 所有小于i的质数,结果为0时,i为合数
if (i % [j integerValue] == 0) {
// 计数 +1
num ++;
// 当判断出i为合数时,跳出循环
break;
}
// 当j大于i的开根时,i % j无意义,跳出循环。(no why!)
if ([j integerValue] >= sqrt(i)) {
break;
}
}
// 计数为0时,i为质数,并将i加入数组中
if (num == 0) {
[array addObject:[NSString stringWithFormat:@"%ld",i]];
// NSLog(@"%ld",i);
}
// no why!
i = i + 2;
}
// 质数个数,还差个“2”,所以 +1
NSLog(@"%ld",array.count + 1);