真的爱小狗. 2021-12-10 20:08 采纳率: 56%
浏览 95
已结题

判读素数,哥德巴赫猜想” (10 分) 著名的“哥德巴赫猜想”的大致意思是:

,哥德巴赫猜想” (10 分) 著名的“哥德巴赫猜想”的大致意思是:任何一个大于2的偶数总能表示为两个素数之和。比如:24=5+19,其中5和19都是素数。本实验的任务是设计一个程序,验证20亿以内的偶数都可以分解成两个素数之和。

问下这个判断素数是怎么判断的?n*n什么意思?为什么n+=2?


def isprime(x):
    if x==2: return True
    if x%2==0: return False
    n=3
    while n*n<=x:
        if x%n==0: return False
        n+=2
    return True

```

  • 写回答

5条回答 默认 最新

  • 小康2022 新星创作者: python技术领域 2021-12-10 21:20
    关注

    【有帮助请采纳】
    判断数字x是否为素数:主要思路是排除合数,剩下的就是素数
    定义函数isprime
    如果x等于2,则它是素数
    按程序执行的顺序,如果在判断是否为2时没有返回True,则说明x不是2,那么判断x是否为偶数,如果是就返回Flase,因为偶数中只有2是素数
    定义n从3开始(定义为1没有意义,任何数对1取余运算都是0)
    每次n加2,因为值判断奇数,(不用设置n为偶数,因为此时的x是奇数,而奇数对偶数取余不会等于0)
    如果取余运算等于0,显然x就是合数,返回Flase
    至于为什么是n*n:
    因为一个合数的约数都是成对出现的,不难理解,一个合数的任意一对约数,只会出现两种情况(这是个数学问题)
    第一,这对约数相等
    第二,这对约数中一个大于该合数的算术平方根,还有一个小于该合数的算术平方根
    所以,为了加快程序的运行速度,我们遍历数字x可能的约数,从3开始,遍历到该数的平方根就行了
    又因为,约数必定是整数,所以在大于n的平方而不大于(n+1)的平方根之间的数字x的算术平方根必定在n与n+1之间,所以这里是 n*n<x
    最后,排除了一个素数2和全部的合数之后,剩下的就是素数了,返回True
    【有帮助请采纳】

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 12月18日
  • 已采纳回答 12月10日
  • 创建了问题 12月10日