C++の機能だけで多倍長計算を考えるスレ
■ このスレッドは過去ログ倉庫に格納されています
0154デフォルトの名無しさん
NGNG二進展開っていうのはこういうやつ。関係ないのかな?
typedef unsigned long int uint32;
uint32 modplus(uint32 a, uint32 b, uint32 m){
return (a > m - b)? a - (m - b): a + b;
}
uint32 modby(uint32 a, uint32 b, uint32 m){
uint32 sum;
for(sum = 0; b > 0; a = modplus(a, a, m), b >>= 1)
if(b & 1) sum = modplus(sum, a, m);
return sum;
}
uint32 modpow(uint32 a, uint32 k, uint32 m){
uint32 b;
for(b = 1; k > 0; a = modby(a, a, m), k >>= 1)
if(k & 1) b = modby(b, a, m);
return b;
}
■ このスレッドは過去ログ倉庫に格納されています