情報アイランド

「情報を制する者は世界を制す」をモットーに様々な情報を提供することを目指すブログです。現在はプログラミング関連情報が多めですが、投資関連情報も取り扱っていきたいです。

Node.jsでBigInteger.jsを使って多倍長整数を使用する

多倍長整数を使用するにはbig-integerモジュールを利用する方法などがあります。

この記事ではbig-integerモジュールを利用する方法を取り上げます。


多倍長整数を作成するにはbigInteger関数を使用します。

第1引数に多倍長整数を文字列として指定します。aからz又はAからZまでの英字は10から35までの桁の数字を表します。また、数値を<>で囲むことによっても桁の数字を表すことができます。

第2引数に進数を指定します。

返り値として多倍長整数を表すオブジェクトが得られます。


多倍長整数を表すオブジェクトは主に下のような関数を有します。

  • abs・・・絶対値を計算します。
  • add・・・加算を行います。
  • and・・・AND演算を行います。
  • compare・・・比較を行います。比較対象と同じである場合には0を返し、比較対象より大きい場合には1を返し、小さい場合には-1を返します。
  • compareAbs・・・絶対値の比較を行います。比較対象と同じである場合には0を返し、比較対象より大きい場合には1を返し、小さい場合には-1を返します。
  • compareTo・・・compare関数と同じです。
  • divide・・・除算を行います。
  • divmod・・・商及び剰余を求めます。商をquotientプロパティに格納し、剰余をremainderプロパティに格納したオブジェクトを返します。
  • eq・・・equals関数と同じです。
  • equals・・・比較対象と同じであるか調べます。同じである場合にはtrueを返し、同じでない場合にはfalseを返します。
  • geq・・・greaterOrEquals関数と同じです。
  • greater・・・比較対象より大きいか調べます。大きい場合にはtrueを返し、大きくない場合にはfalseを返します。
  • greaterOrEquals・・・比較対象以上であるか調べます。以上である場合にはtrueを返し、以上でない場合にはfalseを返します。
  • gt・・・greater関数と同じです。
  • isDivisibleBy・・・対象の約数であるか調べます。
  • isEven・・・偶数であるか調べます。
  • isNegative・・・負数であるか調べます。
  • isOdd・・・奇数であるか調べます。
  • isPositive・・・正数であるか調べます。
  • isPrime・・・素数であるか調べます。
  • isProbablePrime・・・確率的に素数であるか調べます。
  • isUnit・・・1又は-1であるか調べます。
  • isZero・・・0であるか調べます。
  • leq・・・lesserOrEquals関数と同じです。
  • lesser・・・比較対象より小さいか調べます。小さい場合にはtrueを返し、小さくない場合にはfalseを返します。
  • lesserOrEquals・・・比較対象以下であるか調べます。以下である場合にはtrueを返し、以下でない場合にはfalseを返します。
  • lt・・・lesser関数と同じです。
  • minus・・・subtract関数と同じです。
  • mod・・・剰余を求めます。
  • modPow・・・冪剰余を求めます。
  • multiply・・・乗算を行います。
  • neq・・・notEquals関数と同じです。
  • next・・・次の数を返します。
  • not・・・NOT演算を行います。
  • notEquals・・・比較対象と同じでないか調べます。同じでない場合にはtrueを返し、同じである場合にはfalseを返します。
  • or・・・OR演算を行います。
  • over・・・divide関数と同じです。
  • plus・・・add関数と同じです。
  • pow・・・冪乗を求めます。
  • prev・・・前の数を返します。
  • remainder・・・mod関数と同じです。
  • shiftLeft・・・左シフト演算を行います。
  • shiftRight・・・右シフト演算を行います。
  • square・・・自乗を求めます。
  • subtract・・・減算を行います。
  • times・・・multiplyと同じです。
  • xor・・・XOR演算を行います。

また、下のような関数を使用することができます。

  • bigInteger.gcd・・・最大公約数を求めます。
  • bigInteger.lcm・・・最小公倍数を求めます。
  • bigInteger.max・・・大きい方を返します。
  • bigInteger.min・・・小さい方を返します。
  • bigInteger.randBetween・・・範囲内の乱数を生成し、返します。

サンプルコード1

big-integer.js

var bigInteger = require('big-integer');

var i1 = bigInteger.randBetween('1', '1e32');
var i2 = bigInteger.randBetween('1', '1e32');

console.log(i1.toString());
console.log(i2.toString());
console.log(i1.add(i2).toString());
console.log(i1.subtract(i2).toString());
console.log(i1.multiply(i2).toString());
console.log(i1.divide(i2).toString());

使用パッケージ

  • BigInteger.js
    npm install buckets-jsでインストールします。

実行結果

C:\work\node>node big-integer.js
87708312275183596442400776978820
82047277588606649698570273832263
169755589863790246140971050811083
5661034686576946743830503146557
7196228244070184602177673378966949716610449249628200468583669660
1

関連

pizyumi
プログラミング歴19年のベテランプログラマー。業務システム全般何でも作れます。現在はWeb系の技術を勉強中。
スポンサーリンク

-Node.js