ダウンロードの復習
下記のリンクに移動します。
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)。 |
