多倍長演算ライブラリ ルーチン43



[ 簡単な説明 ]

LINT 型数値を int 型数値で割った剰余を返します。


プログラム・ソース("smod.c")           top (トップに戻る)
/*		smod.c		*/
#include "longint.h"

/* modulus LINT % int */

int smod(LINT a, int n)
{
	LINT t, w;
	int i, r;

	if(n == BASE)	r = a.num[1];
	else if(n > BASE)
	{
		t = lset(n);
		ldivide(a, t, &w);
		return iset(w);
	}
	if(a.len == 0)	return 0;
	for(i = a.len, r = 0; i > 0; i--)	r = (r * BASE + a.num[i]) % n;
	return (a.sign == 0) ? r: - r;
}