玩弄一个鲜为人知的哥德巴赫猜想…

阅读Beiler的作品时数字理论中的娱乐,我遇到了哥德巴赫提出的一个相当奇怪的猜想:所有奇数要么是质数,要么可以表示为质数和平方的两倍之和。这似乎很有趣。有两个已知的例外情况,特别是5777和5993,不能这样表达。事实证明,即使在素数中,大多数素数也可以写成类似的和。那些不能被称为“斯特恩素数”的。我想我应该写一个小Python gizmo来检查一下。

果然,一个小的Python脚本之后,加上3m49的运行时间,我们得到了…。

3不是素数和平方的两倍之和17不是素数和平方的两倍之和137不是素数和平方的两倍之和227不是素数和平方的两倍之和977不是素数和平方的两倍之和1187不是素数和平方的两倍之和1493不是素数和平方的两倍之和5777不是素数和平方的两倍之和5993不是素数和平方的两倍之和

前八个都是素数(事实上,是唯一已知的Stern素数)。最后两个是复合的。
没有其他数字小于1000万(是的,脚本尝试了所有数字)。

你可以在这里阅读更多关于这个猜想的信息以及上的WIkipedia条目这里是艉素数.

[tags]数学[/tags]

补遗:我用C重新编写了程序,并运行到最大值=1073741824。C版在我速度更快的工作站上只花了1米41秒,并验证了没有其他奇数不能如此表示,它们小于2^30。

关于“玩弄一个鲜为人知的哥德巴赫猜想…

  1. 锡吉尔9

    我想看看计算这个值的Python脚本,有人知道我在哪里可以找到它吗?

    谢谢!

  2. 马克·范德韦特林 帖子作者

    我无法找到我的源代码,但它非常简单。对于您测试的每个数字,您只需找到小于测试数字一半的所有正方形,然后找到您的数字与正方形两倍之间的差值。如果余数是质数,那么可以将数字_c表示为两倍于一个正方形和一个质数。如果所有这些余数都是合成的,那么这个数字就不能这样表示。您可以在大约sqrt(n)试验中检查数字n。如果你使用存储素数的散列图,那么你可以快速找出一个数字是否是素数。

  3. 锡吉尔9

    谢谢。我正在尝试自学Python,买了一本Pythons书,在书中它挑战读者创建一个与代码完全相同的程序。如果我能看到代码,我会更好地理解它,所以我希望看到你的代码。

    书中的问题涉及哥德巴赫猜想,要求读者输入一个数字,并让程序返回构成该数字的两个质数。仍在寻找如何做到这一点的答案……如果您有任何意见,我将不胜感激。

  4. 利亚姆克斯

    这个确切的问题是关于欧拉项目(http://projecteuler.net/index.php?section=problems&id=46).

    我的算法遇到了问题,求解这个解需要大约4分钟。所以我快速搜索了一下,找到了你的博客。我用Ruby实现了您的算法,但我也对代码做了一些修改。在我的2.33 MBP上,总运行时间是0.3秒!虽然只有6000个…

    该算法只查看奇数合成,只跳过每个偶数或素数!

  5. 约翰尼21

    #包括
    #包括
    #包括
    #包括
    使用命名空间标准;
    #定义尺寸10000000
    无符号long long b;
    bool IsSquare(无符号长整型a)
    {
    b=(int)sqrt(a);
    返回b*b==a;
    }
    整型main()
    {
    无符号长long i,j;
    char*NPrime=(char*)calloc(SIZE,sizeof(char));
    向量素数;
    对于(i=3;i<尺寸;i+=2)
    {
    if(!N素数[i])
    {
    素数。push_back(i);
    对于(j=i*i;j<尺寸;j+=i*2)
    N素数[j]=1;
    }
    其他的
    {
    对于(j=0;j<primes.size();j++)
    if(IsSquare((i-素数[j])/2))
    断裂;
    如果(j==素数.size())
    {
    printf(“%llu无效:Goldbach失败。\n”,i);
    fflush(标准输出);
    扫描(“%llu”,&i);
    }
    其他的
    {
    printf(“%llu=%d+2x%llu\n”,i,素数[j],(i-primes[j])/2);
    fflush(标准输出);
    }
    }
    }
    返回0;
    }

  6. 约翰尼21

    上面的代码非常有效,并且是用c编写的
    去掉else及其括号以计算任何奇数

    include的结果不正确。
    因此:
    #包括标准件。小时
    #包括数学。小时
    #包括stdlib。小时
    #包含向量

  7. 某人

    对不起,1不是最小的奇数,它不是素数,但不能用素数和平方的两倍来表示吗?

  8. 马尔科姆

    根据原始帖子中给出的参考:
    在1752年11月18日写给莱昂哈德·尤勒的信的最后一段,
    哥德巴赫表示他相信每一个奇数都可以用这种形式书写
    p+2a^2,其中p是素数(或1,然后被认为是素数),a>=0是整数
    [2,第594页]。哥德巴赫用他惯用的德语和拉丁语混合体写道:

    所以在哥德巴赫时代,1被定义为质数。当然,现在我们把1定义为一个单位,而不是素数,所以我们必须相应地解释哥德巴赫猜想。

    我认为这里的主要兴趣是编程,而不是数论。

评论已关闭。