public class PowMod { public static void main(String[] args) { BigInteger i1 = new BigInteger("41"); BigInteger i2 = new BigInteger("77"); BigInteger i3 = new BigInteger("221"); System.out.println(i1.modPow(i2,i3)); } }
I C#.net har man ikke typen BigInteger. >Arne V: mht overflow: Maskinens lager sætter i hvertfald en øvre grænse på disse tal, men du har da ret i, at det, at kunne arbejde med "næsten" vilkårligt lange tal, er en fordel.
public class PowMod2 { public static void main(String[] args) { System.out.println(powmod(41, 77, 221)); } public static int powmod(int a, int b, int c) { BigInteger i1 = new BigInteger(Integer.toString(a)); BigInteger i2 = new BigInteger(Integer.toString(b)); BigInteger i3 = new BigInteger(Integer.toString(c)); return i1.modPow(i2,i3).intValue(); } }
arne_v >> der er måske en grund -- hvad nu hvis man vil initialisere en BigInt med en værdi, som ikke kan skrives med en literal (primitiv) int - Med String har man al plads i verden (næsten:-)
Jeg har ikke nogen indvendinger mod constructor med String - selvfølgelig skal den være der.
Jeg savner bare en constructor fra int ved siden af. Fordi man rimeligt ofte har brug for at starte med en lille værdi. Og jeg synes at den konvertering til String er meget grim.
Jeg prøvede lige at operationalisere nmh's algoritme og hvis man ved at a ikke er for stor, så er den faktisk nem at kode:
public class Alt { public static void main(String[] args) { System.out.println(powmod(41, 77, 221)); } public static int powmod(int a, int b, int c) { if(b > 3) { return ((powmod(a, b/2, c) * powmod(a, b- b/2, c)) % c); } else { return (int)(Math.pow(a, b) % c); } } }
arne_v -> ja det der er rimelig meget sejt. (og så virker det sproguafhængigt uden brug af frameworks) :-D (Math.pow er standard - men ellers er den let selv at implementere)
arne_v 22:45:57 -> i min situation så bliver de enkelte tal ikke så store, det er mere når den der potensfunktion kommer ind i billedet at det gav problemer. Nu spiller det maks!
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.