鱼C论坛

 找回密码
 立即注册
查看: 2078|回复: 2

[已解决]求指数

[复制链接]
发表于 2020-11-14 21:20:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
def is_prime(number):
    if number > 1:
        if number == 2:
            return True

        if number % 2 == 0:
            return False

        for current in range(3, int(math.sqrt(number) + 1), 2):
            if number % current == 0:
                return False

        return True
    return False

以上的代码的都能看懂,不理解算法,  for current in range(3, int(math.sqrt(number) + 1), 2):,为什么要从3到n的平方根+1,步长为2,这样子来除,
例如:100的平方根是10,只除3到10之间数,其它的数0为什么不用除?

我的思路是:先判断 n 是否为二,是二就返回True, 不是二就 n 除 1 和它本身,如果 n 的余数不为0,返回False,如果 n 的余数为 0 ,就从2到n-1挨个数。(不知道我这种思路,是否有误,没有实践过)
最佳答案
2020-11-14 21:35:23

看代码可以看出这个是求素数的函数,为什么要除到开平方+1 涉及到算法问题,看下下面这篇文章应该就可以大致理解:

https://blog.csdn.net/lzxlovegyd/article/details/71340090

里面也有举例子助于你的理解~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-14 21:35:23 | 显示全部楼层    本楼为最佳答案   

看代码可以看出这个是求素数的函数,为什么要除到开平方+1 涉及到算法问题,看下下面这篇文章应该就可以大致理解:

https://blog.csdn.net/lzxlovegyd/article/details/71340090

里面也有举例子助于你的理解~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-14 21:45:04 | 显示全部楼层
首先去掉了偶数,剩下就是在奇数里面判断,所以从3开始跨2去掉除数为偶数的可能,然后开平方是因为如果开平方+1里面的数能除尽,那么平方外的数也能除尽,这样可以加快速度,比如一个大于10的数乘一个数能得到100,那么这个数一定在根号100+1以内,所以只需要判断根号内的数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-17 21:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表