作为密码学中一项任务的一部分,我被要求编写涉及计算模块幂的代码。在这种情况下不允许使用BigInteger modPow,我们必须自己实现它。
我已经完成了任务,但我认为我的模幂函数在运行时间方面并不是最好的。它基于从右到左的二进制方法。这就是:
该算法计算(a^b)模c。
private static BigInteger modulo(BigInteger a, BigInteger b, BigInteger c) {
BigInteger x = BigInteger.ONE;
final BigInteger TWO = new BigInteger("2
这是我目前正在学习的udemy课程的代码形式。这段代码是解决(a^n)%b.的递归解决方案。
int fastExpo(int a, long long n, int MOD) {
if(n == 0)
return 1;
/// (a^n) % MOD
if(n % 2 == 0)
/// a ^ n = ((a ^ 2) ^ (n/2))
return fastExpo((1LL * a * a) % MOD, n / 2, MOD);
/// a ^ n = a * (a ^ (n - 1))
r
所以在一个典型的线性优化问题中,我的目标是这样的:
Example of a Linear Program
maximize:
3x + y
subject to:
1.5 x + 2 y <= 12
0 <= x <= 3
0 <= y <= 5
然而,也许我想有两个目标?例如(不确定这是否可能,只需添加一个快速示例)
maximize:
3x + y
maximize:
3x
subject to:
1.5 x + 2 y <=