Subversion Repositories distributed

Rev

Blame | Last modification | View Log | RSS feed

  1. package de.viathinksoft.immortal.bases;
  2. /**
  3.  * Powmod.java
  4.  *
  5.  * Implementation von a^b mod m durch iteriertes Quadrieren. Zum Testen: Der
  6.  * Aufruf java powmod a b m gibt a^b mod m aus.
  7.  *
  8.  * @author Thorsten Altenkirch
  9.  * @version Modified by Daniel Marschall
  10.  *
  11.  */
  12.  
  13. public class PowMod {
  14.  
  15.         /**
  16.          * Ermittelt das nte Bit von l
  17.          */
  18.         private static boolean bit(long l, int n) {
  19.                 return (((l >> n) & 1) != 0);
  20.         }
  21.  
  22.         /**
  23.          * Berechnet a^b mod m durch iteriertes Quadrieren.
  24.          */
  25.         public static long powmod(long a, long m, long n) {
  26.                 long y = 1;
  27.                 for (int i = 62; i >= 0; i--) {
  28.                         y = y * y % n;
  29.                         if (bit(m, i)) {
  30.                                 y = a * y % n;
  31.                         }
  32.                 }
  33.                 return y;
  34.         }
  35.        
  36.         private PowMod() {
  37.         }
  38. }
  39.