qin_yin 发表于 2020-11-14 21:20:01

求指数

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挨个数。(不知道我这种思路,是否有误,没有实践过)

Twilight6 发表于 2020-11-14 21:35:23


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

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

里面也有举例子助于你的理解~

proer 发表于 2020-11-14 21:45:04

首先去掉了偶数,剩下就是在奇数里面判断,所以从3开始跨2去掉除数为偶数的可能,然后开平方是因为如果开平方+1里面的数能除尽,那么平方外的数也能除尽,这样可以加快速度,比如一个大于10的数乘一个数能得到100,那么这个数一定在根号100+1以内,所以只需要判断根号内的数
页: [1]
查看完整版本: 求指数