- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们需要在伪随机数生成器中实现 Blum Blum Shub 算法。我尝试在 c# 中搜索实现以得到一个想法,但没有成功。我们需要实现的一些方法不够清楚(或者我可能没有完全理解他们的要求)。
任何人都可以通过代码或类似方式提供一些帮助吗?我很难从文本中掌握概念。任何帮助都会被大大接受!
首先,我尝试遵循问题的逻辑。由于进展甚微,我开始在线搜索更好的解释,并可能找到实现以更好地理解。最后,我尝试用我认为有意义的内容填充一些请求的方法。
static long seed = 6367859;
static long p = 3263849;
static long q = 1302498943;
static long m = p*q;
// Generates a random bit i.e. 0 or 1 using the Blum Blum Shub Algorithm and the Least Significant Bit
private byte generateRandomBit(){ }
// Method to generate a single positive 32 bit random number using the Blum Blum Shub Algorithm.
// The generateRandomBit() method is used to generate the random bits that make up the random number
// Not complete!!
public int GenerateNextRandomNumber()
{
int nextRandomNumber = (int)((p * seed + q) % m);
seed = nextRandomNumber;
return nextRandomNumber;
}
// Generates a random number between min and max.
// The GenerateNextRandomNumber() method must be used to generate the initial random number which must then be manipulated (if necessary) to be between min and max
public int GenerateNextRandomNumber(int min, int max){ }
// Uses the GenerateNextRandomNumber Method to generate a sequence of Random Numbers between the minimum and the maximum value using the Blum Blum Shub Algorithm
public int[] GenerateRadmonSequence(int n, int min, int max)
{
int[] sequence = new int[n];
for (int i = 0; i < n; i++)
{
int randNum = Math.Abs(GenerateNextRandomNumber());
randNum = min + randNum % (max + 1 +- min);
sequence[i] = randNum;
}
return sequence;
}
结果应该是生成一个从最小值到最大值的数字序列。
最佳答案
不,您不能对这种类型的 RNG 使用多头:它几乎需要任意精度的数学运算。你实现的实际上看起来像 Linear Congruential Generator算法,而不是 Blum Blum Shub算法。
这是使用 .NET Core 2.2 和 Win10 x64 的代码让你开始。使用 BigInteger,我相信正确的算法和奇偶校验来获取下一个随机位。您也可以将最低有效位用于随机位。
using System;
using System.Numerics;
namespace BlumBlumSnub
{
class Program
{
public static readonly BigInteger p = 3263849;
public static readonly BigInteger q = 1302498943;
public static readonly BigInteger m = p*q;
public static BigInteger next(BigInteger prev) {
return (prev*prev) % m;
}
public static int parity(BigInteger n) {
BigInteger q = n;
BigInteger count = 0;
while (q != BigInteger.Zero) {
count += q & BigInteger.One;
q >>= 1;
}
return ((count & BigInteger.One) != BigInteger.Zero) ? 1 : 0; // even parity
}
public static int LSB(BigInteger n) {
return ((n & BigInteger.One) != BigInteger.Zero) ? 1 : 0;
}
static void Main(string[] args)
{
BigInteger seed = 6367859;
BigInteger xprev = seed;
for(int k = 0; k != 100; ++k) {
BigInteger xnext = next(xprev);
int bit = parity(xnext); // extract random bit from generated BBS number using parity,
// or just int bit = LSB(xnext);
Console.WriteLine($"Bit = {bit}");
xprev = xnext;
}
}
}
}
关于c# - 使用 Blum Blum Shub 算法的伪随机数生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56408677/
我正在尝试设置 scrapy 设置以在本地和 scrapinghub 上使用测试和生产环境。我想知道是否有任何方法可以在 shub 部署上设置此变量(例如如下): 然后在settings.py中: i
我们需要在伪随机数生成器中实现 Blum Blum Shub 算法。我尝试在 c# 中搜索实现以得到一个想法,但没有成功。我们需要实现的一些方法不够清楚(或者我可能没有完全理解他们的要求)。 任何人都
我在使用shub-image运行/部署自定义脚本时遇到问题。 设置.py from setuptools import setup, find_packages setup( name = '
请帮我理解BBS算法。我做了这个实现: class EmptySequenseError(Exception): pass
我是一名优秀的程序员,十分优秀!