Python 和模块化算术

问题描述

假设 ab 是奇数。那么 a^2 + b^221016。我的问题如下:有没有办法编写假设为 a%2 == 1b%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

这当然不会返回元组。我希望输出元组 (2,10)。

解决方法

据我所知,您想将 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)