任何人都可以帮我找到一个N * N * N→N的双射数学函数,它取三个参数x,y和z并返回一个数字n?
我想知道函数f及其反函数f'以某种方式,如果我有n,我将能够通过应用f'(n)来确定x,y,z。
答案 0 :(得分:3)
假设g是从N×N到N的双射,并且令g -1 是它的逆。然后我们可以用g来定义f如下。
f(x,y,z)= g(g(x,y),z)= n
f -1 (n)=(x,y,z)其中g -1 (n)=(w,z)且g - 1 (w)=(x,y)
我们现在有一个更简单的定义g的问题。
g(x,y)=(x + y)(x + y + 1)/ 2 + y = n
g -1 (n)=(x,y)其中m =⌊(2n) 1/2 ⌋,并且恰好以下两个条件之一成立。
x + y = m和y = n - m(m + 1)/ 2
x + y = m - 1且y = n - m(m - 1)/ 2
def f(x, y, z):
return g(g(x, y), z)
def f_inv(n):
w, z = g_inv(n)
x, y = g_inv(w)
return (x, y, z)
def g(x, y):
return (x + y) * (x + y + 1) / 2 + y
def g_inv(n):
m = math.floor(math.sqrt(2 * n))
while True:
y = n - m * (m + 1) / 2
if y >= 0:
break
m -= 1
x = m - y
return x, y
答案 1 :(得分:0)
F(x,y,z) = 2^x*3^y*5^z
实际上,您可以选择任何不同的素数集。逆就是简单地通过分解为相应的素因数。