求前n个素数的方法
欢迎使用Markdown编辑器
上班公交上看了个求素数的方法,叫埃拉托斯特尼筛法,简称埃氏筛或爱氏筛,外文名sieve of Eratosthenes,又称筛法。觉得代码用这种方法求前n个素数太浪费空间,于是突发奇想想了这个求前n个素数的方法。只保存已筛选出来的素数,算后面某个数是不是素数时,只需要跟已筛选出来的素数做余判断即可,所以代码及结果记录如下:
objectivec
// main.m
// Prime
//
// Created by caishuibin on 2025/11/30.
// 记得我最开始学素数时,我以为素数越后面会越稀疏,后来才发现它还是很稠密的,
#import <Foundation/Foundation.h>
//0: OK 1: Error
int printPrimeTo(int end)
{
int const maxCnt = 100;
int primeCnt = 1;
int primeArr[maxCnt]={2};
int i = 3,j;
NSLog(@"%d",2);
while(i < end)
{
bool isPrime = true;
//j = 0;
for(j = 0; j<primeCnt; j++)
{
if(i % primeArr[j] == 0)//
{
isPrime = false;
break;
}
if(primeArr[j]*primeArr[j] > i)
{
break;
}
}
if(isPrime)
{
if(primeCnt < maxCnt)
{
primeArr[primeCnt] = i;
NSLog(@"%d delta=%d",i,i-primeArr[primeCnt - 1]);
primeCnt++;
}
else
{
NSLog(@"maxCnt is too small");
return primeCnt;
}
}
i+=2;
}
return primeCnt;
}
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
NSLog(@"Hello, World!");
int primeCnt = printPrimeTo(10000);
NSLog(@"printCnt=%d",primeCnt);
}
return 0;
}
2025-11-30 22:22:47.575700+0800 Prime[32444:1726835] Hello, World!
2025-11-30 22:22:47.576333+0800 Prime[32444:1726835] 2
2025-11-30 22:22:47.576428+0800 Prime[32444:1726835] 3 delta=1
2025-11-30 22:22:47.576484+0800 Prime[32444:1726835] 5 delta=2
2025-11-30 22:22:47.576531+0800 Prime[32444:1726835] 7 delta=2
2025-11-30 22:22:47.576574+0800 Prime[32444:1726835] 11 delta=4
2025-11-30 22:22:47.576616+0800 Prime[32444:1726835] 13 delta=2
2025-11-30 22:22:47.576660+0800 Prime[32444:1726835] 17 delta=4
2025-11-30 22:22:47.576701+0800 Prime[32444:1726835] 19 delta=2
2025-11-30 22:22:47.576743+0800 Prime[32444:1726835] 23 delta=4
2025-11-30 22:22:47.576830+0800 Prime[32444:1726835] 29 delta=6
2025-11-30 22:22:47.576894+0800 Prime[32444:1726835] 31 delta=2
2025-11-30 22:22:47.576997+0800 Prime[32444:1726835] 37 delta=6
2025-11-30 22:22:47.577070+0800 Prime[32444:1726835] 41 delta=4
2025-11-30 22:22:47.577151+0800 Prime[32444:1726835] 43 delta=2
2025-11-30 22:22:47.577230+0800 Prime[32444:1726835] 47 delta=4
2025-11-30 22:22:47.577310+0800 Prime[32444:1726835] 53 delta=6
2025-11-30 22:22:47.578241+0800 Prime[32444:1726835] 59 delta=6
2025-11-30 22:22:47.578565+0800 Prime[32444:1726835] 61 delta=2
2025-11-30 22:22:47.578671+0800 Prime[32444:1726835] 67 delta=6
2025-11-30 22:22:47.585378+0800 Prime[32444:1726835] 71 delta=4
2025-11-30 22:22:47.585446+0800 Prime[32444:1726835] 73 delta=2
2025-11-30 22:22:47.585551+0800 Prime[32444:1726835] 79 delta=6
2025-11-30 22:22:47.585599+0800 Prime[32444:1726835] 83 delta=4
2025-11-30 22:22:47.585640+0800 Prime[32444:1726835] 89 delta=6
2025-11-30 22:22:47.585683+0800 Prime[32444:1726835] 97 delta=8
2025-11-30 22:22:47.585724+0800 Prime[32444:1726835] 101 delta=4
2025-11-30 22:22:47.586688+0800 Prime[32444:1726835] 103 delta=2
2025-11-30 22:22:47.586999+0800 Prime[32444:1726835] 107 delta=4
2025-11-30 22:22:47.587079+0800 Prime[32444:1726835] 109 delta=2
2025-11-30 22:22:47.587128+0800 Prime[32444:1726835] 113 delta=4
2025-11-30 22:22:47.587171+0800 Prime[32444:1726835] 127 delta=14
2025-11-30 22:22:47.587213+0800 Prime[32444:1726835] 131 delta=4
2025-11-30 22:22:47.587257+0800 Prime[32444:1726835] 137 delta=6
2025-11-30 22:22:47.588173+0800 Prime[32444:1726835] 139 delta=2
2025-11-30 22:22:47.588461+0800 Prime[32444:1726835] 149 delta=10
2025-11-30 22:22:47.588573+0800 Prime[32444:1726835] 151 delta=2
2025-11-30 22:22:47.588624+0800 Prime[32444:1726835] 157 delta=6
2025-11-30 22:22:47.588695+0800 Prime[32444:1726835] 163 delta=6
2025-11-30 22:22:47.589228+0800 Prime[32444:1726835] 167 delta=4
2025-11-30 22:22:47.589292+0800 Prime[32444:1726835] 173 delta=6
2025-11-30 22:22:47.590012+0800 Prime[32444:1726835] 179 delta=6
2025-11-30 22:22:47.590117+0800 Prime[32444:1726835] 181 delta=2
2025-11-30 22:22:47.590255+0800 Prime[32444:1726835] 191 delta=10
2025-11-30 22:22:47.590342+0800 Prime[32444:1726835] 193 delta=2
2025-11-30 22:22:47.590431+0800 Prime[32444:1726835] 197 delta=4
2025-11-30 22:22:47.590505+0800 Prime[32444:1726835] 199 delta=2
2025-11-30 22:22:47.590577+0800 Prime[32444:1726835] 211 delta=12
2025-11-30 22:22:47.590793+0800 Prime[32444:1726835] 223 delta=12
2025-11-30 22:22:47.591240+0800 Prime[32444:1726835] 227 delta=4
2025-11-30 22:22:47.591309+0800 Prime[32444:1726835] 229 delta=2
2025-11-30 22:22:47.591476+0800 Prime[32444:1726835] 233 delta=4
2025-11-30 22:22:47.591531+0800 Prime[32444:1726835] 239 delta=6
2025-11-30 22:22:47.591576+0800 Prime[32444:1726835] 241 delta=2
2025-11-30 22:22:47.591621+0800 Prime[32444:1726835] 251 delta=10
2025-11-30 22:22:47.591666+0800 Prime[32444:1726835] 257 delta=6
2025-11-30 22:22:47.591775+0800 Prime[32444:1726835] 263 delta=6
2025-11-30 22:22:47.591915+0800 Prime[32444:1726835] 269 delta=6
2025-11-30 22:22:47.592028+0800 Prime[32444:1726835] 271 delta=2
2025-11-30 22:22:47.592264+0800 Prime[32444:1726835] 277 delta=6
2025-11-30 22:22:47.592335+0800 Prime[32444:1726835] 281 delta=4
2025-11-30 22:22:47.592443+0800 Prime[32444:1726835] 283 delta=2
2025-11-30 22:22:47.592527+0800 Prime[32444:1726835] 293 delta=10
2025-11-30 22:22:47.592589+0800 Prime[32444:1726835] 307 delta=14
2025-11-30 22:22:47.592658+0800 Prime[32444:1726835] 311 delta=4
2025-11-30 22:22:47.592978+0800 Prime[32444:1726835] 313 delta=2
2025-11-30 22:22:47.593040+0800 Prime[32444:1726835] 317 delta=4
2025-11-30 22:22:47.593117+0800 Prime[32444:1726835] 331 delta=14
2025-11-30 22:22:47.593193+0800 Prime[32444:1726835] 337 delta=6
2025-11-30 22:22:47.593261+0800 Prime[32444:1726835] 347 delta=10
2025-11-30 22:22:47.594038+0800 Prime[32444:1726835] 349 delta=2
2025-11-30 22:22:47.594173+0800 Prime[32444:1726835] 353 delta=4
2025-11-30 22:22:47.594230+0800 Prime[32444:1726835] 359 delta=6
2025-11-30 22:22:47.594276+0800 Prime[32444:1726835] 367 delta=8
2025-11-30 22:22:47.594319+0800 Prime[32444:1726835] 373 delta=6
2025-11-30 22:22:47.594362+0800 Prime[32444:1726835] 379 delta=6
2025-11-30 22:22:47.594402+0800 Prime[32444:1726835] 383 delta=4
2025-11-30 22:22:47.594443+0800 Prime[32444:1726835] 389 delta=6
2025-11-30 22:22:47.594486+0800 Prime[32444:1726835] 397 delta=8
2025-11-30 22:22:47.594527+0800 Prime[32444:1726835] 401 delta=4
2025-11-30 22:22:47.594568+0800 Prime[32444:1726835] 409 delta=8
2025-11-30 22:22:47.595079+0800 Prime[32444:1726835] 419 delta=10
2025-11-30 22:22:47.595138+0800 Prime[32444:1726835] 421 delta=2
2025-11-30 22:22:47.595185+0800 Prime[32444:1726835] 431 delta=10
2025-11-30 22:22:47.595231+0800 Prime[32444:1726835] 433 delta=2
2025-11-30 22:22:47.595327+0800 Prime[32444:1726835] 439 delta=6
2025-11-30 22:22:47.595448+0800 Prime[32444:1726835] 443 delta=4
2025-11-30 22:22:47.595511+0800 Prime[32444:1726835] 449 delta=6
2025-11-30 22:22:47.595592+0800 Prime[32444:1726835] 457 delta=8
2025-11-30 22:22:47.595694+0800 Prime[32444:1726835] 461 delta=4
2025-11-30 22:22:47.595742+0800 Prime[32444:1726835] 463 delta=2
2025-11-30 22:22:47.595806+0800 Prime[32444:1726835] 467 delta=4
2025-11-30 22:22:47.595879+0800 Prime[32444:1726835] 479 delta=12
2025-11-30 22:22:47.596493+0800 Prime[32444:1726835] 487 delta=8
2025-11-30 22:22:47.596551+0800 Prime[32444:1726835] 491 delta=4
2025-11-30 22:22:47.596581+0800 Prime[32444:1726835] 499 delta=8
2025-11-30 22:22:47.596860+0800 Prime[32444:1726835] 503 delta=4
2025-11-30 22:22:47.597059+0800 Prime[32444:1726835] 509 delta=6
2025-11-30 22:22:47.597685+0800 Prime[32444:1726835] 521 delta=12
2025-11-30 22:22:47.597745+0800 Prime[32444:1726835] 523 delta=2
2025-11-30 22:22:47.597795+0800 Prime[32444:1726835] 541 delta=18
2025-11-30 22:22:47.597859+0800 Prime[32444:1726835] maxCnt is too small
2025-11-30 22:22:47.597926+0800 Prime[32444:1726835] printCnt=100
Program ended with exit code: 0