任何人都有關於如何在java中實現這樣的問題的想法? 「實現一個帶有三個正整數參數(a; b; n)的子例程並返回((a對b的冪)mod n)的 值,其中參數由大約100位十進制數字表示。使用四種不同的方法。「Java BigInteger,數論,模塊化算術
在此先感謝
UPD:方法是像下面
M1)
public BigInteger Result1(BigInteger a , BigInteger b , BigInteger n){
BigInteger Res = new BigInteger("1");
for (BigInteger i = new BigInteger("0"); !i.equals(b); i = i.add(new BigInteger("1"))) {
Res = Res.multiply(a).mod(n);
}
return Res;
}
M2)
public BigInteger Result2(BigInteger a , BigInteger b , BigInteger n){
BigInteger Res = new BigInteger("1");
for (BigInteger i = new BigInteger("0"); !i.equals(b); i = i.add(new BigInteger("1"))) {
Res = Res.multiply(a);
}
return Res.mod(n);
}
M3)
ublic BigInteger Result3(BigInteger a , BigInteger b , BigInteger n){
if(b.equals(new BigInteger("0"))){
return new BigInteger("1");
}
else if(b.mod(new BigInteger("2")).equals(new BigInteger("0"))){
BigInteger Res = Result3(a,b.divide(new BigInteger("2")),n);
return (Res.multiply(Res)).mod(n);
}
else{
return ((a.mod(n)).multiply(Result3(a, b.subtract(new BigInteger("1")), n))).mod(n);
}
}
M4)
public BigInteger Result4(BigInteger a , BigInteger b , BigInteger n){
BigInteger Res = new BigInteger("1");
while(!b.equals(new BigInteger("0"))) {
if(!(b.mod(new BigInteger("2"))).equals(new BigInteger("0"))) {
Res = Res.multiply(a).mod(n);
}
a = a.multiply(a).mod(n);
b = b.divide(new BigInteger("2"));
}
return Res;
}
讓我們看看你已經嘗試了什麼。 – 2014-12-19 01:30:15
@pbabcdefp關於(一個電源b)部分,我已經嘗試了以下代碼片段 http://pastebin.com/McVawk6W 但不幸的是項目終止沒有任何outout。 – 2014-12-19 01:50:55