- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在某个地方遇到了以下问题,但对我的回答不满意。
qtn:你已经给出了一个可以是 100 亿个数字的列表。现在你必须找出其中哪些是素数。
我回答说,要找到素数,我们必须遍历十亿个数的循环并逐一检查是否是最佳天气。我们可以在这里进行一些优化检查,如果 no 是 even 我们将不检查,因为素数 no 不能是偶数。为了存储否,我们可以使用 double 组,因为 double 组的大小为 8 字节,因此它也可以处理十亿个数字。但他似乎仍然不满意。请在这里提供帮助,这里的答案可能更合理。谢谢!
最佳答案
比方说,我们将素数存储在一个数组中。根据Sieve of Eratosthenes :
当算法终止时,您将在数组中存储所有小于 10¹⁰ 的素数。
要找到所有小于或等于 20 的素数,过程将是:
首先生成一个从 2 到 20 的整数列表:
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
列表中的第一个数字是 2;通过从 2 以 2 递增计数(这些将是列表中所有 2 的倍数),在 2 之后划掉列表中的每个第 2 个数字:
2 3
4567891011121314151617181920
列表中 2 之后的下一个数字是 3;通过从 3 开始以 3 为增量向上计数,将列表中 3 之后的每第 3 个数字划掉(这些将是列表中所有 3 的倍数):
2 3
4567891011121314151617181920
列表中 3 之后尚未划掉的下一个数字是 5;通过从 5 开始以 5 为增量计数(即 5 的所有倍数),将列表中的每 5 个数字在 5 之后划掉,但此时它们都已被划掉,因为这些数字(10、15、20)也是倍数较小的素数,因为5*5大于20。此时列表中没有划掉的数都是20以下的素数:
2 3 5 7 11 13 17 19
如您所说,为了提高效率,您最初可以只列出奇数,(3, 5, ...., 10⁹),然后从 2p 开始计数em>p² 在步骤 3 中,因此仅标记 p 的奇数倍。
另一种提高效率的方法是,在第 3 步中标记从 p² 开始的数字,因为 p 的所有较小倍数都已在此处标记观点。这意味着当 p² 大于 10¹⁰ 时,允许算法在第 5 步终止。
如果您的内存不足并且需要生成较小范围内的素数,您也可以查看分段筛。
关于algorithm - 从数十亿个数字中找出质数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26462144/
我知道这不是寻找素数的最佳方法,也不是最有效的方法;但是,我似乎无法找到 169 算作素数的原因(就我而言,对于较小的数字,它可以正常工作)。 public static int checkPrime
有人可以指导我获取素数吗?这是家庭作业,所以我不想要答案,但一些指示将不胜感激。这真的让我很烦:( 我想我很接近。但是我遇到的问题是数字 25 和 35。它们不是质数,但是这个函数正在返回它们 var
利用正则判别素数,来源于网络,神人! 复制代码 代码如下: Set regex = New RegExp regex.Pattern = "^1?$&b
质数又称素数。一个大于1的自然数,如果除了1和它自身外,不能被其他自然数整除的数;否则称为合数。根据算术基本定理,每一个比1大的整数,要么本身是一个质数,要么可以写成一系列质数的乘积;而且如果不考虑
我在 Ruby on Rails 中尝试如何找到质数。这是我的代码: 助手:app/helpers/test_helper.rb module TestHelper
lower = int(input("from:")) upper = int(input("to:")) for num in range(lower,upper + 1): if num >
最近我对 LINQ 很感兴趣。我正在尝试获取质数。我实际上做得很好,但我的代码没有显示低于 Sqrt(n) 的素数。 static void Main(string[] args) {
在尝试设计算法时,我偶然发现了这个问题。这不是家庭作业。 令 P_i = 前 i 个素数的数组。现在我需要最小的 i 这样 Sum 1 / (P_i[n]*P_i[n]) >= 1. (如果这样的
本文已收录到 AndroidFamily ,技术和职场问题,请关注公众号 [彭旭锐] 提问。 大家好,我是小彭。 上周跟大家讲到小彭文章风格的问题,和一些朋友聊过以后,
我是新来的。我正在尝试解决此练习 Problem 18只是为了加强我的解决能力。我已经编码了答案。该任务要求“在 1,000,000 以下的质数中,有多少个数位之和等于两周中的天数?” (两周是 14
我是一名优秀的程序员,十分优秀!