|
[ 簡単な説明 ]
a の n 乗を求めます。n を2進数に変換して、平方(2乗)ルーチン(=lsqr( ))を用いて効率よくべき乗を求めています。 |
/* lpwr.c */
#include "longint.h"
/* power LINT ^ int */
LINT lpwr(LINT a, int n)
{
int r;
LINT x;
x.len = x.sign = 0;
if(n < 0)
{
fprintf(stderr, "Error : Illegal parameter (n < 0) in spwr()\n");
return x;
}
x.len = 1;
x.num[1] = 1;
if(n == 0) return x;
if(a.len * n > MAXLEN)
{
fprintf(stderr, "Error : Too large in lpwr()\n");
return x;
}
while(n > 0)
{
r = n % 2;
n /= 2;
if(r == 1) lmul1(&x, a);
a = lsqr(a);
}
return x;
}
|