博客
关于我
Objective-C实现埃拉托色尼筛法(附完整源码)
阅读量:798 次
发布时间:2023-02-20

本文共 1580 字,大约阅读时间需要 5 分钟。

埃拉托色尼筛法(Sieve of Eratosthenes)是一种高效地找出一定范围内所有素数的算法。在本文中,我们将详细介绍如何使用Objective-C实现这一经典算法。

埃拉托色尼筛法的实现

埃拉托色尼筛法的基本思想是通过逐步筛选来移除非素数,从而找出所有在给定范围内的素数。具体步骤如下:

  • 创建布尔数组:首先,我们需要创建一个布尔数组isPrime,用于标记每个数是否为素数。数组的长度为给定的上限limit,初始时所有元素都设置为YES,表示最初假定所有数都是素数。

  • 处理边界条件:由于2是最小的素数,因此我们首先将其标记为素数,并将其后续的偶数全部标记为非素数,以减少计算量。

  • 筛选过程:从最小的素数开始(即从2开始),逐个筛选。对于每一个素数p,我们从p*p开始,到limit结束,步长为p。对于每个位置i,如果isPrime[i]仍为YES,则将其标记为NO,因为它不是素数。

  • 返回结果:最终,数组中所有标记为YES的位置即为所求的素数。

  • 以下是完整的Objective-C实现代码:

    #import 
    NSMutableArray* sieveOfEratosthenes(NSInteger limit) { NSMutableArray* isPrime = [[NSMutableArray alloc] init]; // 初始化数组,所有元素初始为YES for (NSInteger i = 0; i <= limit; i++) { [isPrime addObject:[NSNumber numberWithBool:YES]]; } // 处理边界条件:2是最小的素数 if (limit >= 2) { [isPrime replaceObjectAtIndex:1 withObject:[NSNumber numberWithBool:NO]]; // 将所有2的倍数标记为非素数 for (NSInteger i = 4; i <= limit; i += 2) { [isPrime replaceObjectAtIndex:i withObject:[NSNumber numberWithBool:NO]]; } } // 从最小的素数开始筛选 for (NSInteger p = 2; p * p <= limit; p++) { if ([[isPrime objectAtIndex:p] boolValue]) { // 标记p的倍数为非素数 for (NSInteger i = p * p; i <= limit; i += p) { [isPrime replaceObjectAtIndex:i withObject:[NSNumber numberWithBool:NO]]; } } } return isPrime;}

    代码解释

    • 初始化数组:创建一个初始为YES的布尔数组isPrime,表示所有数最初都被认为是素数。
    • 处理偶数:由于2是最小的素数,直接标记2和所有偶数为非素数。
    • 筛选过程:从最小的素数开始,逐个筛选,标记其倍数为非素数。
    • 返回结果:最终返回标记数组isPrime,其中YES表示对应的数是素数。

    通过这种方法,我们可以高效地找出给定范围内的所有素数。这种方法的时间复杂度为O(n log log n),在处理较大范围时表现尤为出色。

    转载地址:http://kvifk.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现卡恩拓扑algorithm topo算法(附完整源码)
    查看>>
    Objective-C实现卷积(附完整源码)
    查看>>
    Objective-C实现卷积神经网络CNN(附完整源码)
    查看>>
    Objective-C实现卷积运算(附完整源码)
    查看>>
    Objective-C实现卷积运算(附完整源码)
    查看>>
    Objective-C实现压缩字符串(附完整源码)
    查看>>
    Objective-C实现压缩文件夹(附完整源码)
    查看>>
    Objective-C实现原型模式(附完整源码)
    查看>>
    Objective-C实现原码一位乘法(附完整源码)
    查看>>
    Objective-C实现去掉字符串中指定的字符(附完整源码)
    查看>>
    Objective-C实现去除字符串中的空格(附完整源码)
    查看>>
    Objective-C实现双向A*算法(附完整源码)
    查看>>
    Objective-C实现双向广度优先搜索算法(附完整源码)
    查看>>
    Objective-C实现双向循环链表(附完整源码)
    查看>>
    Objective-C实现双向循环链表(附完整源码)
    查看>>
    Objective-C实现双向链表(附完整源码)
    查看>>
    Objective-C实现双工通信(附完整源码)
    查看>>
    Objective-C实现双端队列算法(附完整源码)
    查看>>
    Objective-C实现双线性插值(附完整源码)
    查看>>
    Objective-C实现双重链表(附完整源码)
    查看>>