gpt4 book ai didi

c# - 如何生成一定范围内的随机 BigInteger?

转载 作者:可可西里 更新时间:2023-11-01 08:21:23 44 4
gpt4 key购买 nike

考虑这个效果很好的方法:

public static bool mightBePrime(int N) {
BigInteger a = rGen.Next (1, N-1);
return modExp (a, N - 1, N) == 1;
}

现在,为了满足我正在类的要求,mightBePrime 必须接受 BigInteger N,但这意味着我需要一种不同的方式来生成我的随机 BigInteger a

我的第一个想法是做类似 BigInteger a = (N-1) * rGen.NextDouble () 的事情,但是 BigInteger 不能乘以 a

如何生成介于 1 和 N-1 之间的随机 BigInteger,其中 N 是 BigInteger

最佳答案

Paul 在评论中建议我使用随机字节生成一个数字,如果它太大则将其丢弃。这是我的想法(Marcel 的回答 + Paul 的建议):

public static BigInteger RandomIntegerBelow(BigInteger N) {
byte[] bytes = N.ToByteArray ();
BigInteger R;

do {
random.NextBytes (bytes);
bytes [bytes.Length - 1] &= (byte)0x7F; //force sign bit to positive
R = new BigInteger (bytes);
} while (R >= N);

return R;
}

http://amirshenouda.wordpress.com/2012/06/29/implementing-rsa-c/也有一点帮助。

关于c# - 如何生成一定范围内的随机 BigInteger?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17357760/

44 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com