
一个 20000+ ~ 30000+ 的正整数,能否通过一个算法固定的映射到 0~255 的三个数字,而且足够离散(即随机程度比较高)。
比如
我的初步想法是能不能 n % 255, n * 3 % 255, n * 7 % 255 这样,不过这样似乎会导致 3 个数字之间有一定的关联,不够随机。不知道大家有没有什么好办法呢。
1 QAPTEAWH Sep 27, 2017 相当于映射到 0~16777215 ? |
2 qq31107934 Sep 27, 2017 CRC32(int) % 16777215 % 255 % 65535 |
3 Valyrian Sep 27, 2017 何止是有一定关联, ((n%255)x3)%255 = 3n%255 |
4 zj299792458 Sep 27, 2017 把一个 3 万的集合映射到一个几千万的集合,好像不太够? |
5 flyingghost Sep 27, 2017 看起来不需要可逆? 那就相当随意了。。。sum(md5(n)) % 255 反正足够随机+落到 0~255 范围内即可。 |
6 luos543 Sep 27, 2017 用这个正整数作为 seed 生成 3 个随机数(逃 |
7 qq316107934 Sep 27, 2017 @luos543 #6 不满足固定映射的条件,感觉还是要用哈希函数 |
8 momocraft Sep 27, 2017 密码学 hash 应该比简单 hash 更有利于离散,比如 md5() 后取末尾 24bit |
9 luos543 Sep 27, 2017 @qq316107934 是固定映射,因为大部分随机库都是假随机。 |
10 nousername2030 Sep 27, 2017 @luos543 不同 seed 得到的序列混用是不符合随机特性的 |
11 zhy0216 Sep 27, 2017 sin(x) * 16777215 ? |
12 zhy0216 Sep 27, 2017 ^^ 错了 (sin(x) + 1) / 2 * 16777215 |
13 af463419014 Sep 27, 2017 用现成的离散算法计算,然后再取模 数字的 hash 连续的,那就 md5 一下 hash(md5(x))%(256*256*256) |