math

对比两种方案,哪个更有优势
1、example 1
from math import sqrt

num = int(input('请输入一个正整数: '))
end = int(sqrt(num))
print(end)
is_prime = True
for x in range(2, end + 1):
if num % x == 0:
is_prime = False
break
if is_prime and num != 1:
print('%d是素数' % num)
else:
print('%d不是素数' % num)

print(19 * 17)

上面的例子采用开平方的方式进行被除参数的选值范围,直接限定了取余对象的最大值,因为根据乘除法的特点可以知道,被除数 × 结果 = 除数,也就是说对大于开平方意外的任何一个数取余,那么另与之对应的结果必然小于开平方的值,也就是说能被整除的一定在开平方以内,比如说对于25开平方,那么能被25取于的一定在5之内(包含5),因为如果你大于5,那另一个值就一定小于5,比如6,那另一个值就是约等于4,4*6=24,4比5小。
2、example 2
一个大于1的自然数,除了1和它本身外,不能被其他自然数(质数)整除(2, 3, 5, 7等),换句话说就是该数除了1和它本身以外不再有其他的因数。

首先我们来第一个传统的判断思路:

def handlerNum(num):
# 质数大于 1
if num > 1:
# 查看是否有其他因子
for i in range(2, num//2+1):
if (num % i) == 0:
print(num,"不是质数")
break
else:
print(num, "是质数")

# 如果输入的数字小于或等于 1,不是质数
else:
    print(num, "不是质数")

上面这个例子,也是正确的,但是算法的次数增加了,取余对象限制在一半以内,和上面的逻辑有点类似,当你的取余对象大于值的一半时,那么另一个值必然在小于值的一半当中,也就是取余对象一定小于或等于值的一半。

你可能感兴趣的:(math)