多倍長演算ライブラリ ヘッダー



[ 簡単な説明 ]

本ライブラリ中の定義関数のプロトタイプ宣言を行います。

関数プロトタイプ 機能
void aldec(LINT *a, int n) デクリメント(|n|≧0)
void alinc(LINT *a, int n) インクリメント(|n|≧0)
LINT alsub(LINT a, LINT b) 絶対値減算
LINT aux1(LINT a, LINT b) 絶対値加算
LINT det(LINT *a, int n) 行列式の値(n×n)
int iset(LINT a) LINT → int 変換
LINT ladd(LINT a, LINT b) 加算
void larrayread(LINT *a, char *s, int n) LINT 型配列定数設定
void larrayset(LINT *a, int *x, int n) LINT 型配列定数設定
int lcmp(LINT a, LINT b) 比較関数
void ldec(LINT *a, int n) デクリメント
void ldisp(char *s, LINT a) LINT 型数値表示(stderr 出力)
LINT ldivide(LINT a, LINT b, LINT *r) 除算(r = 剰余)
void ldown(LINT *a, int n) 桁下げ
void lfactor(LINT x) 素因数分解
LINT lgcd(LINT a, LINT b) 最大公約数
void linc(LINT *a, int n) インクリメント
LINT linv(LINT s, LINT n) 法 n における逆数
LINT lkaijo(int n) 階乗
LINT llcm(LINT a, LINT b) 最小公倍数
LINT llgcd(LINT a[], int n) 最大公約数
LINT lllcm(LINT a[], int n) 最小公倍数
LINT lmod(LINT a, LINT b) 剰余
LINT lmul(LINT a, LINT b) 乗算
LINT lmulp(LINT a, LINT b) 乗算(符号無視)
void lmul1(LINT *a, LINT b) 乗算
int lprime_chk(LINT x) 素数判定
(戻り値=1:素数,=0:合成数)
LINT lpwr(LINT a, int n) ベキ乗
LINT lpwrmod(LINT a, LINT b, LINT n) 法 n におけるベキ乗
LINT lread(char *s) LINT 型定数設定
LINT lrnd(int n) n 桁の乱数(*1)
LINT lrnd1(LINT a) 0 < x < a の乱数(*1)
LINT lset(int n) LINT 型定数設定
LINT lsqr(LINT a) 平方
LINT lsqrt(LINT a) 平方根
LINT lsub(LINT a, LINT b) 減算
void lswap(LINT *a, LINT *b) 入替え
void lup(LINT *a, int n) 桁上げ
void lwrite(char *s, LINT a) LINT 型数値表示出力
LINT sadd(LINT a, int n) 加算
LINT sdiv(LINT a, int n, int *r) 除算(r = 剰余)
void sdiv1(LINT a, int n, int *r) 除算(r = 剰余)
int smod(LINT a, int n) 剰余
LINT smul(LINT a, int n) 乗算
void smul1(LINT *a, int n) 乗算
LINT ssub(LINT a, int n) 減算


(*1) 乱数ライブラリの urnd1( ) を使用。init_urnd1(seed)により初期化を行うこと。


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

#include	<stdio.h>
#include	<ctype.h>
#include	<string.h>
#include	<sys/types.h>
#include	<math.h>
#include	<stdlib.h>

#define		BASE		100
#define		BASE1		99			/* BASE - 1 */
#define		BASE2		10000		/* BASE ^ 2 */
#define		MAXLEN		500			/* 最大桁数 */
#define		MAXLEN2		1000		/* 10進表示時の最大桁数 */
#define		NBASE		2			/* BASE = 10 ^ NBASE */

typedef		struct
			{
				int len;
				int sign;			/* + : 0, - : -1 */
				int num[MAXLEN + 1];
			}							 LINT;

LINT lset(long n);
LINT lread(char *s);
LINT ladd(LINT a, LINT b);
LINT aux1(LINT a, LINT b);
LINT alsub(LINT a, LINT b);
LINT lsub(LINT a, LINT b);
LINT sadd(LINT a, int n);
LINT ssub(LINT a, int n);
LINT smul(LINT a, int n);
LINT lmul(LINT a, LINT b);
LINT sdiv(LINT a, int n, int *r);
LINT ldivide(LINT a, LINT b, LINT *r);
LINT lsqrt(LINT a);
LINT lsqr(LINT a);
LINT lmod(LINT a, LINT b);
LINT lpwr(LINT a, int n);
LINT lpwrmod(LINT a, LINT b, LINT n);
LINT lgcd(LINT a, LINT b);
LINT linv(LINT s, LINT n);
LINT lkaijo(int n);
LINT lrnd(int len);
LINT lrnd1(LINT n);
LINT llcm(LINT a, LINT b);
LINT llgcd(LINT *a, int n);
LINT lllcm(LINT *a, int n);
LINT det(LINT *aa, int n);
LINT lmulp(LINT a, LINT b);
int lcmp(LINT a, LINT b);
int iset(LINT a);
int smod(LINT a, int n);
int lprime_chk(LINT x);
void lwrite(char *s, LINT a);
void linc(LINT *a, int n);
void ldec(LINT *a, int n);
void alinc(LINT *a, int n);
void aldec(LINT *a, int n);
void smul1(LINT *a, int n);
void sdiv1(LINT *a, int n, int *r);
void lup(LINT *a, int n);
void ldown(LINT *a, int n);
void lswap(LINT *a, LINT *b);
void lmul1(LINT *a, LINT b);
void lfactor(LINT x);
void larrayse(LINT *a, int *num, int n);
void larrayread(LINT *a, char *string[], int n);
void ldisp(char *s, LINT a);
extern double urnd1(void);

#endif