Algorithms/Mathematics/Big Integer/Power Mod

Last-modified: 2008-05-23 (金) 10:48:51

Power Mod

大きな数に対するモジュロ演算

Outline

&mimetex( a^{s} mod n = v);となるvを求める.

Program1

long powerMod(long a, long s, long n) {
  long v = 1;

  while(s > 0) {
    if(s % 2 == 1) {
      v = (v * a) % n;
    }

    a = (a * a) % n;

    s /= 2;
  }

  return v;
}
EOF

** Program2 [#t1ff18d2]
#code(c)
long double big_mod(long double b, long double p, long double m) {
  // B^p mod M = X
  long double x = 1;

  while(p > 0) {
    if(fmod(p, 2)) {
      p--;
      x = fmod(x * b , m);
    }

    p /= 2;
    b = fmod(fmod(b, m) * b, m);
  }

  return x;
}