ダウンロードの復習

下記のリンクに移動します。

BigInt_TemplateProject.zipをダウンロードして解凍します。

解凍でできた BigInt_TemplateProject フォルダをダブルクリックして開きます。中にある BigInt_for_swift.xcodeproj をクリックして実行します。

変数を初期化します。

let a: BigInt = "9999999999999999999999999999999999999999999999"

let b: BigInt = "1000000000000000000000000000000000000000000000"

どちらも文字列リテラルで宣言しています。

let b: BigInt = 10000000000000

こちらは整数リテラルです。整数リテラルはあまり大きな数字は宣言できません。これはswiftの制限でどうにもなりません。

let c = a * b

print(c)//

  print(a * b)//9999999999999999999999999999999999999999999999000000000000000000000000000000000000000000000

現在実装している関数は以下のとおりです。

 

初期化

関数

入力

出力

説明

init(_ value: Int)

value: Int

BigInt

整数値 value から新しい BigInt インスタンスを生成します。

init(_ string: String)

string: String

BigInt

数字文字列から新しい BigInt インスタンスを生成します。

 

 

四則演算・演算子オーバーロード

関数

入力

出力

説明

static func +

lhs: BigInt, rhs: BigInt

BigInt

2つの BigInt を加算します。

static func -

lhs: BigInt, rhs: BigInt

BigInt

2つの BigInt を減算します。

static func *

lhs: BigInt, rhs: BigInt

BigInt

2つの BigInt を乗算します。

static func /

lhs: BigInt, rhs: BigInt

BigInt

lhs を rhs で割った商を返します(整数除算)。

static func %

lhs: BigInt, rhs: BigInt

BigInt

lhs を rhs で割った余りを返します。

static func +=

inout lhs: BigInt, rhs: BigInt

なし

lhs に rhs を加算して代入します。

static func -=

inout lhs: BigInt, rhs: BigInt

なし

lhs から rhs を減算して代入します。

static func *=

inout lhs: BigInt, rhs: BigInt

なし

lhs に rhs を乗算して代入します。

static func /=

inout lhs: BigInt, rhs: BigInt

なし

lhs を rhs で割った商を代入します。

 

 

比較演算子

関数

入力

出力

説明

static func ==

lhs: BigInt, rhs: BigInt

Bool

2つの BigInt が等しい場合 true を返します。

static func <

lhs: BigInt, rhs: BigInt

Bool

lhs が rhs より小さい場合 true を返します。

static func >

lhs: BigInt, rhs: BigInt

Bool

lhs が rhs より大きい場合 true を返します。

static func <=

lhs: BigInt, rhs: BigInt

Bool

lhs が rhs 以下の場合 true を返します。

static func >=

lhs: BigInt, rhs: BigInt

Bool

lhs が rhs 以上の場合 true を返します。

 

 

数学関数

関数

入力

出力

説明

static func pow

base: BigInt, exp: Int

BigInt

base の exp 乗を計算します(exp は非負整数)。

static func modPow

base: BigInt, exp: BigInt, mod: BigInt

BigInt

(base^exp) mod mod を計算します。

static func sqrt

n: BigInt

BigInt

n の整数平方根を返します。

static func gcd

a: BigInt, b: BigInt

BigInt

a と b の最大公約数を求めます。

static func lcm

a: BigInt, b: BigInt

BigInt

a と b の最小公倍数を求めます。

static func factorial

n: Int

BigInt

n!(階乗)を計算します。

static func isPerfectSquare

n: BigInt

Bool

n が完全平方数かどうかを判定します。

static func isProbablePrime

n: BigInt, iterations: Int

Bool

Miller–Rabin 法で n が素数らしいかどうかを判定します。

 

 

判定系

関数

入力

出力

説明

func isEven()

なし

Bool

偶数であれば true を返します。

func isOdd()

なし

Bool

奇数であれば true を返します。

 

 

乱数

関数

入力

出力

説明

static func random(digits:)

count: Int

BigInt

指定桁数のランダムな BigInt を生成します。

static func random(in:)

range: ClosedRange<BigInt>

BigInt

指定範囲のランダムな BigInt を生成します。

 

 

ユーティリティ

関数

入力

出力

説明

func digitCount()

なし

Int

桁数を返します。

func toHexString()

なし

String

16進文字列に変換して返します。

private func toIntSafe()

なし

Int

BigInt を安全に Int に変換します(オーバーフロー時は0)。