我正在使用 java 开发一个应用程序,它需要找到满足这两个条件的两个大整数(Y 和 Z):
Y^k < N and Z^j < N < Z^(j+1)
N、k 和 j 是已知的。N 是一个大整数(1024 位)。
我当前的实现通过选择一个随机的 BigInteger 并测试是否满足条件来找到 Y 和 Z。但问题是有时需要很长时间才能找到解决方案,或者根本找不到解决方案(可能未正确计算 bitSize)。有什么办法可以加快速度吗?
编码:
BigInteger getMessage(int bitSize, int lowerBound, int upperBound, BigInteger module)
{
boolean foundOne = false;
BigInteger candidate = null;
while( !foundOne )
{
candidate = new BigInteger(bitSize,random);
foundOne = (upperBound == 0 || candidate.pow(upperBound).compareTo(module) > 0 ) && (lowerBound == 0 || candidate.pow(lowerBound).compareTo(module) < 0);
}
return candidate;
}