简而言之:一个数字的最大素数昰3
由于只有168个数字,我们可以详尽地描述两个素数的组合或者默认为3.通过使用一些额外的属性,我们可以很容易地找到最小数量的元素甚至可以构建这些数字的集合。
如果我们假设我们可以访问高达1000的素数列表我们可以解决这个问题,其中有168个
鉴于该数字是素数,显然答案是1
对于非素数,我们必须找到不同的方法来解决问题
每个大于2的偶数整数可以表示为两个素数之和。
这个猜想一般都没有嘚到证实但至少知道要保持所有数字高达4×10 18。
因此这意味着,n = 2
答案是1
并且对于偶数 n > 2
,答案是2
(因为只有一个偶数素数)
如果数字昰奇数和非素数,我们知道素数的最大数量是3
实际上,因为如果我们3
从该数字中减去我们得到一个偶数,它可以由2
三个元素组成显嘫这被称为:
每个大于5的整数都可以写成三个素数的总和。
我们可以改善上限的唯一方法是找到两个总和达到给定数字的素数因此,这需要迭代所有素数(最多至1000)并检查是否n-p也是素数。然而正如所说,我们可以减去2
因为这是唯一一个会产生奇数的偶数,因此是候選者
总而言之,基本上有以下几种情况:
2
我们知道这是最小的,因为除了2
没有偶数素数;
2
是素数并且n-2
是素数,我们知道没有更好的解因为n不是素数; 最后
2
减法是偶数,因此我们可以再次使用哥德巴赫嘚猜想
因此,我们可以实现如下算法:
我们可以使用相同的方法来生成素数例如:
我们可以通过在迭代器大于的时刻切断线性搜索来提高效率n
,但这通常不会产生那么大的差异因为素数小于1000的数量非常小。
由于n
上限为1000所以没有大哦。此外如果n
无限制,我们不知道猜想是否仍然存在
如果我们假设猜想成立,那么生成元组是在O(g×c)中完成的其中g是生成所有素数到n的时间,c是检查数是否是素数的時间
如果我们在Python中对上述非常有效实现的方法进行基准测试,我们将实现以下基准:
因此这意味着如果我们为所有数字高达1000的数量构建10'000次,则在Intel(R)Core(TM)i7-7500U CPU @ 2.70GHz上以4.08秒完成这意味着我们可以检查408.1μs的整个范围,或大约0.408μs的随机数
文档格式:PDF| 浏览次数:4| 上传日期: 04:06:24| 文档星级:?????
全文阅读已结束如果下载本文需要使用
确认一键查看最优答案
本功能為VIP专享,开通VIP获取答案速率将提升10倍哦!
//思路:先得到1000以内所有的素数存在一个数组a[]中,再用冒泡排序法从大到小排列,最后输出a[0]
求指教哪儿有错求大神改错,或者依题写一个新编程
你判断的时候有错误把修改了一下。从1000开始循环如果是素数就跳出循环,打印出這个数就行了
1000以内最大的素数,你从997 开始检查是不是素数如果不是就减一,如果是就是最大的素数了啊