我正在尝试生成一个 BigInteger 类型的随机质数,它介于我提供的最小值和最大值之间。
我知道 BigInteger.probablePrime(int bitlength, random),但我不确定位长如何或是否会转换为输出素数的最大/最小值。
谢谢, 史蒂文1350
最佳答案
如果您的最大/最小比率不接近 1,jprete 的回答是可以的。
如果您的范围很窄,最好的选择可能就是执行以下操作:
// this is pseudocode:
//
// round min down to multiple of 6, max up to multiple of 6
min6 = floor(min/6);
max6 = ceil(max/6);
maybePrimeModuli = [1,5];
do
{
b = generateRandom(maybePrimeModuli.length);
// generate a random offset modulo 6 which could be prime
x = 6*(min6 + generateRandom(max6-min6)) + b;
// generate a random number which is congruent to b modulo 6
// from 6*min6 to 6*max6-1
// (of the form 6k+1 or 6k+5)
// the other choices 6k, 6k+2, 6k+3, 6k+4 are composite
} while not isProbablePrime(x);
density of primes总的来说是相当高的,它基本上是 log(x) 中的 1,所以你不应该重复太多次来找到一个质数。 (举个例子:对于 1023 左右的数字,平均每 52 个整数中就有一个是素数。上面的代码只对每 6 个数字中的 2 个有问题,所以你最终会得到对于 1023 左右的数字,平均循环 17 次。)
只需确保您有一个良好的素数测试,而 Java BigInteger 有一个。
作为读者的练习,扩展上述函数,使其通过使用 30k + x 提前过滤掉更多合数(模 30,有 22 个模总是合数,剩下的 8 个可能是质数) , 或 210k + x。
编辑:另见 US patent #7149763 (我的天啊!!!)
关于Java BigInteger 素数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1801003/
这行ruby代码检测素数(太棒了!)。("1"*n)!~/^1?$|^(11+?)\1+$/#wherenisapositiveinteger详细信息在这篇博文中解释http://www.noulakaz.net/weblog/2007/03/18/a-regular-expression-to-check-for-prime-numbers/我很好奇它在BIG-O表示法中的表现。有人帮忙吗? 最佳答案 根据经验数据,它似乎是O(n2)。我对前10000个质数中的每100个运行Ruby代码。以下是结果:蓝点是记录的时间,橙色线是
我需要在JavaScript中生成一个随机的大(大约4096位)质数,我已经在使用forge。Forge必须为此类任务提供某种生成器,因为它实现了同样依赖于随机素数的RSA。但是,当您只想获得一个随机素数时,我没有在forge的文档中找到任何东西(比如varmyRandomPrime=forge.random.getPrime(4096);会很棒)。那么在JavaScript中获得这样一个质数(有或没有伪造)的最佳方法是什么? 最佳答案 2014年6月11日更新:现在,使用forge版本0.6.6,您可以使用:varbits=102
所以这里我有一个base64编码的png图像:iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==然后我用atob()解码了它.结果是:PNGIHDRo&åIDAT×cøÿÿ?ÃÃÐ1ñXÍõ5ËÑIEND®B`是否可以从这个字符串中取出颜色值?(不使用)PS:好像可以,因为我找到了demo:http://labs.calyptus.eu/JSBin/Demo/Viewer.html但我不确定他是怎么做到的。
我编写了一个基准测试来计算前10000个素数的总和,并将Rust与JavaScript进行了比较。NodeJS上的JavaScript是Rust、Scala和Java中最快的。尽管这些程序有意使用函数式风格来测试素数以展示Rust的零成本抽象的优势,但NodeJS击败了它们。NodeJS这种动态类型运行时怎么能这么快?Rust代码fnsum_primes(n:usize)->u64{letmutprimes=Vec::new();letmutcurrent:u64=2;letmutsum:u64=0;whileprimes.len()JavaScript代码functionsumPri
我有一张从相机胶卷或任何其他来源(通常是本地来源)加载的图像。我怎样才能访问它的像素数据图来执行一些计算或测量? 最佳答案 有一种使用native模块获取此信息的方法,但目前我只有Android实现。在RN0.42.3上测试。首先,您需要在您的应用中创建一个原生模块。假设应用程序以名称SampleApp初始化,在您的ReactNative项目android/app/src/main/java/com/sampleapp/bitmap中创建新目录,其中包含两个文件其中:android/app/src/main/java/com/sam
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Receivingimagethroughwebsocket使用imageData=context.getImageData(0,0,width,height);JSON.stringify(imageData.data);我抓取像素数据,将其转换为字符串,然后通过websockets通过网络发送。但是,这个字符串可能会很大,具体取决于Canvas对象的大小。我尝试使用此处的压缩技术:JavaScriptimplementationofGzip但是socket.io抛出错误Websocketmessageco
我是一个n00b,过去几天一直在研究这个问题,但我只是被困住了。我在OpenSuseLinux中工作,试图解释Windows位图图像以使用Cairo图形库显示。简单地说,我只需要将每个像素的颜色信息放入一个数组并将其提供给开罗,例如pixeldata[i]=someColor,用于图像中的所有像素。到目前为止,我已经弄明白了如何解析位图header并使其能够很好地显示24位位图。但是,现在我正在努力让8位位图也显示出来,而且它只是一个难以处理、不直观的野兽。我能够显示图像,但显示的颜色是错误的......不仅如此,每次我运行程序时它们都会改变!:P我想我正在错误地访问和解释bmiCol
我的问题实际上有答案,但它不是并行化的,所以我对改进算法的方法很感兴趣。不管怎样,它对某些人来说可能是有用的。intUntil=20000000;BitArrayPrimeBits=newBitArray(Until,true);/**SieveofEratosthenes*PrimeBitsisasimpleBitArraywhereallbitisaninteger*andwemarkcompositenumbersasfalse*/PrimeBits.Set(0,false);//Youdon'tactuallyneedthis,justPrimeBits.Set(1,false
我是C#的初学者,我正在尝试编写一个应用程序来获取用户输入的两个数字之间的素数。问题是:在大数(有效数在1到1000000000范围内)获取素数需要很长时间,根据我要解决的问题,整个操作必须在一个小的时间间隔内进行。这是更多解释的问题链接:SPOJ-Prime这是我的代码中负责获取质数的部分:publicvoidGetPrime(){intL1=int.Parse(Limits[0]);intL2=int.Parse(Limits[1]);if(L1==1){L1++;}for(inti=L1;i有没有更快的算法?提前致谢。 最佳答案
我正在用一些与素数相关的方法编写一个小库。由于我已经完成了基础工作(又名工作方法),现在我正在寻找一些优化。当然,互联网是这样做的绝佳场所。然而,我偶然发现了一个舍入问题,我想知道如何解决这个问题。在我用来测试一个数字的素数的循环中,搜索到sqrt(n)比n/2甚至n-1更有效。但是由于舍入问题,一些数字被跳过,因此一些素数是跳过!例如,第10000个素数应为:104729,但“优化”版本最终为:103811。一些代码(我知道它是开放的以进行更多优化,但我一次只能处理一件事)://////Methodfortestingtheprimalityofanumbere.g.:returnI