用自然数(或整数)运算算术定义的异或

2024-09-29 17:19:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我在查看其他帖子以找到XOR的算术方法,并找到了this,但无法应用于python3中的自然数

琐碎的方式:

a = 12
b = 5
a^b ===> 9

使用其他职位公式:

a = 12
b = 5
a + b - a*b*(1 + a + b - (a*b))   ===> 2537

另一种选择:

a = 12
b = 5
(a-b)**2   ===> 49

当然,如果a和b是0或1,就像其他帖子所说的那样,前面的所有方法都可以很好地工作,但是

是否有一个函数可以以更算术的方式获得自然数的异或

更新: 使用响应代码,我以更数学的方式构建了算术fórmulas,只是让问题和答案更加清晰。谢谢大家!

enter image description here


Tags: 方法函数答案代码方式职位数学算术
1条回答
网友
1楼 · 发布于 2024-09-29 17:19:19

首先,我们必须确定“算术”的定义。《大英百科全书》说它是“数学的一个分支,在这个分支中,数字、数字之间的关系以及对数字的观察被研究并用于解决问题”

根据这些基本规则,除了通常的+-*/之外,以下是合法的:

  • 整数除法
  • 模(除法的余数)
  • 最大值和比较(数字之间的关系)

可以利用这些数据进行算术“位移位”

以下各项符合给定标准:

# By the problem statement, we're dealing with Natural numbers (Z+). No need to check for negatives.

def numBits(x):
    acc = 0
    while x > 0:
        x //= 2
        acc += 1
    return acc

def xor(a, b):
    acc = 0
    pos = 1
    for i in range(numBits(max(a, b))):
        acc += ((a + b) % 2) * pos
        a //= 2
        b //= 2
        pos *= 2

    return acc

# Prints 9
print(xor(12, 5))

Try it online!

“算术”可以包括指数运算和对数运算,以节省一些输入,但我将其保留为更基本的运算

如果您正在寻找更单一的公式,如果您事先知道数字的位宽度n,您可以将上述循环展开为n项之和:

def xor(a, b):
    return ((a + b) % 2) + ((a // 2 + b // 2) % 2) * 2 + ... + ((a // 2 ** n + b // 2 ** n) % 2) * 2 ** n

相关问题 更多 >

    热门问题