从现有的 int 中随机生成 int

发布于 2025-01-07 02:39:27 字数 383 浏览 2 评论 0原文

考虑以下 int;

int start = 287729472784;

从该 int 开始,我需要创建一个长度仅为三位数的新 int,我可以使用 0-9 之间的任何值。

但是,为了创建新的 int,我无法使用任何形式的现有随机数生成器。

我想知道是否可以使用模块化异或位移位操作的组合以某种方式减少数量。例如将最后一个数字与其前面的数字进行异或,但我不确定这是否可能。

基本上,我需要从起始 int 创建一个三位数长的 int,理想情况下将起始 int 的长度减少到三位数。

我希望这是有道理的,我将不胜感激任何意见。

谢谢

Consider the following int;

int start = 287729472784;

From that int, I need to create a new int that is only three digits in length, I can use any of the values from 0-9.

However, in order to create the new int, I cannot use any form of already existing random number generators.

I was wondering if it possible to use a combination of modular, xor, and, bit-shift- operations to somehow reduce the number down. Such as xor the last digit with the one before it, but I'm not sure if that is even possible.

Basically I need to create a three digit long int from the starting int, ideally reducing the starting int down to three digits in length.

I hope that makes sense and I'd appreciate any input.

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

情深如许 2025-01-14 02:39:27

不确定是否了解您的需求,但如果您唯一的愿望是从另一个数字生成 3 位数字,也许模函数可以帮助您:

var startNumber = 287729472784;
var modifiedNumber = startNumber % 1000;

如果您希望伪随机的 moddedNumber 每一代都会变化,您可以使用以毫秒为单位的时间:

var startNumber = 287729472784;
var modifiedNumber = startNumber * new Date().getTime() % 1000;

我希望它会有所帮助。

Not sure to understand your need but if your only wish is to generate a 3 digits number from another number maybe that the modulo function could help you :

var startNumber = 287729472784;
var modifiedNumber = startNumber % 1000;

If you wish a pseudo-randomn modifiedNumber that changes for each generation you can use time in miliseconds :

var startNumber = 287729472784;
var modifiedNumber = startNumber * new Date().getTime() % 1000;

I hope it'll help.

vaL

扭转时空 2025-01-14 02:39:27

嗯。我不明白这个问题,但是... start % 1000 会产生 start 的最低有效 3 位数字(不过:要小心负值)?

Hm. I don't understand the problem, but... start % 1000 would yield the least significant 3 digits of start (though: be careful with negative values)?

空心↖ 2025-01-14 02:39:27

最佳答案实际上取决于最终数字的使用。由于 SHA1 一开始就是相当“随机”的,因此使用 % 1000 就足够了——如果您要寻找的只是表中的哈希值,那么您将在所有可能的 SHA1 输入范围内获得良好的分布。

但是,如果您正在寻找一个 3 位数字与输入几乎没有关系或没有关系(意味着,不仅仅是模数......)的转换,您将需要某种方法将所有位都添加到结果中。如果是这样的话,我建议进行诸如 CRC16 之类的转换。将 SHA1 值输入到您最喜欢的 CRC16 例程中,然后返回该值的模 1000 值,请记住,某些结果会比其他结果更频繁地出现。

The best answer really depends on the use of that final number. Since SHA1's are reasonably "random" to start with, using % 1000 should suffice -- you'll get a good spread over the range of all possible SHA1 inputs, if all you're looking for is a hash into a table.

However, if you're looking for a transform where the 3 digit number has little or no relationship (meaning, not just a modulo ...) to the input, you'll need some way to bang all the bits into the result. If that's the case, I'd suggest a transform such as CRC16. Feed the SHA1 value into your favorite CRC16 routine, then return the modulo 1000 value of that, keeping in mind that some results will show up more often than others.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文