【问题标题】:How to generated random BigInteger numbers between 1 and anything?如何生成介于 1 和任何值之间的随机 BigInteger 数?
【发布时间】:2015-05-07 21:32:59
【问题描述】:

我正在尝试生成随机数,我使用 BigInteger 类来检查生成的数字是否为 probablePrime() 的素数;

这是我的代码:

btnRun.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Random prng = new Random();

            Toast.makeText(getBaseContext()," " + BigInteger.probablePrime(10,prng), Toast.LENGTH_SHORT).show();

        }
    });

我不太了解 probablePrime() 中的第一个参数,在我的例子中是 10。我知道它是 int 值的字节,这会影响生成数字的范围吗? 我只从 523-1003 获取值但我想生成随机数 从 1-anything 并在 probablePrime();方法。

这怎么可能?

【问题讨论】:

  • 当我们谈论数字时,我不知道“任何东西”是什么,也许你应该澄清一下
  • 我的意思是任何东西都可以是没有任何特定范围的随机数。

标签: java android random android-studio biginteger


【解决方案1】:

查看BigInteger.randomPrime(int, Random)的javadoc:

公共静态 BigInteger probablePrime(int bitLength, 随机 rnd)

返回一个可能是素数的正 BigInteger,具有指定的 bitLength。此方法返回的 BigInteger 为合数的概率不超过 2-100。

参数:

  • bitLength - 返回的 BigInteger 的 bitLength。 [强调我的]
  • rnd - 随机位的来源,用于选择要测试素性的候选者。

您会注意到参数是要获取的素数中的数,因此10表示0到1023是候选者。

如果您希望素数达到特定限制,则应确定所需的位数:

int numBits = Integer.highestOneBit(yourLimit);

并丢弃大于限制的素数。

【讨论】:

  • @RC。谢谢!我已将其添加到答案的开头。
  • 所以 10 将给出 0-1023 的范围?
  • 任务是创建一个应用程序来搜索和存储越来越大的质数到文件。
  • @Spoofy 是的,它应该,因为 1023 是 10 位(我不确定是否 1023 本身是素数)
猜你喜欢
  • 2012-11-03
  • 2016-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-01
  • 2022-12-06
  • 1970-01-01
相关资源
最近更新 更多