【问题标题】:Python and Modular ArithmeticPython 和模块化算术
【发布时间】:2021-07-08 03:54:16
【问题描述】:

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

【问题讨论】:

  • 您需要稍微扩展一下这个问题。 python 中的% 运算符只返回一个值;不是元组
  • 您正在寻找能够从逻辑命题中产生所有可能输出的脚本?这远远超出了 Python 的任何内置功能。
  • 虽然这是一个很好的问题,我们有很多探索的可能性,但到目前为止,您探索了什么?你能展示一下你做了什么吗?或者您是否正在寻求社区的答案以帮助您入门?我们希望您展示您的工作并寻求帮助,而不是我们为您提供答案。
  • (a^2 + b^2) % 16 总是返回一个整数,而不是一个元组。
  • 对于我的问题导致的混乱,我深表歉意。我知道 % 返回一个值。我的希望是找到将元组(2,10)输出到给定问题的命令或包。关于乔的问题,我编辑了我的回复以展示我在此方面的尝试。

标签: python modular-arithmetic


【解决方案1】:

据我了解,您希望将 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, 16, 2)
}

residues = tuple(sorted(residues))
print(residues)

【讨论】:

  • @M.H.Tajaddini 您建议的编辑不正确。 Python 范围不包括其上限 - range(16) 最多为 15,而range(15) 最多只能为 14。
猜你喜欢
  • 1970-01-01
  • 2011-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-23
  • 2019-09-13
  • 2014-12-01
  • 1970-01-01
相关资源
最近更新 更多