给出数值对应关系如下:
x = y n m
1 = 1 1 0
2 = 2 1 1
3 = 3 2 1
4 = 4 1 2
5 = 6 2 2
6 = 5 3 2
7 = 7 4 2
8 = 8 1 3
9 = 12 2 3
10 = 9 3 3
11 = 13 4 3
12 = 10 5 3
13 = 14 6 3
14 = 11 7 3
15 = 15 8 3
16 = 16 1 4
17 = 24 2 4
18 = 17 3 4
19 = 25 4 4
20 = 18 5 4
21 = 26 6 4
22 = 19 7 4
23 = 27 8 4
24 = 20 9 4
25 = 28 10 4
请以x、n、m为参数列出公式:
y = ?
1
silverzhao 2014-12-23 17:52:24 +08:00 1
目前可以看出,m = [log2 x], n = x+1-2^m.
y 的关系还没有看出来。 |
2
silverzhao 2014-12-23 18:15:20 +08:00 1
好了,算出来了:
当 x 为奇数时,y = 2^m + (x-1)/2; 当 x 为偶数时,y = 2^(m-1) + x/2。 |
3
silverzhao 2014-12-23 18:21:17 +08:00 1
再看了下,可以归并成一个式子:
y = 2^(m-1+(x&1)) + [x/2], 其中,[x] 表示对 x 向下取整。 |
4
Valyrian 2014-12-23 18:22:32 +08:00 1
我算的:
mod = 2**n - 1 offset = 2**(n-1) - 1 y = x+(x*offset)%mod-offset 除了第一行div by zero其他都满足。。 |