好了, 我们继续挑战下Python入门编程, 如何判断一个数是素数?以及如何分解一个合数?
首先回忆下:素数就是大于1且除了1和它本身之外没有其他素因子。大于1的非素数称为合数。形如F_n=2^2^n+1的数称为Fermat数。本节将判断Fermat数是否是素数。
isprime函数
# -*- coding: utf-8 -*-
def isprime(num: int) -> bool:
if not isinstance(num, int):
raise TypeError
if num < 0:
num = -num
if num == 1:
return False
if num == 2:
return True
if not num % 2:
return False
p = 3
while p * p <= num:
if not num % p:
return False
else:
p += 2
return True
这里用到了定义函数时, 进行输入参数的类型判断。 想一想, 如何添加输出参数的类型判断。
接下来, 我么将负数转化为正数, 而对1,2这两个特例进行简单处理。最后用一个while循环来从p=3开始判断p是不是其素因子, 如果是则返回非素数, 否则对p+2再次循环判断, 直到p*p超过要判断的数为止。
对Fermat数是否为素数可以测试如下。
# test with Fermat numbers
for i in range(7):