问题描述
假设 a
和 b
是奇数。那么 a^2 + b^2
是 2
或 10
模 16
。我的问题如下:有没有办法编写假设为 a%2 == 1
和 b%2 == 1
的脚本,以便输出 (a^2 + b^2) % 16
给出元组 (2,10)
?
编辑:这是我失败的方法:
def test():
aList=[]
bList=[]
for a in range(0,16):
for b in range(0,16):
if a%2==1 and b%2==1:
aList.append(a)
bList.append(b)
print a^2+b^2%16
解决方法
据我所知,您想将 a**2 + b**2
的模 16 的不同残基收集到一个元组中(注意 ^
运算符不是您想要的)。因此,与其将每个残差都打印出来,不如将它们添加到一个集合中以收集不同的值。然后可以将集合转换为元组,使用 sorted
将它们按顺序排列:
residues = set()
for a in range(0,16):
for b in range(0,16):
if a % 2 == 1 and b % 2 == 1:
residues.add((a**2 + b**2) % 16)
residues = tuple(sorted(residues))
print(residues)
结果如预期的那样(2,10)
。
这段代码可以稍微简化一下:不是生成范围内的所有整数并只保留奇数,您可以使用从 1 开始、步长为 2 的范围生成奇数;并且为了简洁起见,您可以使用集合推导式。
residues = {
(a**2 + b**2) % 16
for a in range(1,16,2)
for b in range(1,2)
}
residues = tuple(sorted(residues))
print(residues)