From 723a418d742c209dde591ac960b47d3e75a83101 Mon Sep 17 00:00:00 2001 From: Juanra Dikal Date: Mon, 1 Aug 2022 04:06:04 +0200 Subject: [PATCH] 3.1.0 --- docs/.nojekyll | 1 + docs/API.md | 292 ++++++++++++++++++++++++++++++++++++++++ docs/interfaces/Egcd.md | 39 ++++++ package-lock.json | 4 +- package.json | 2 +- 5 files changed, 335 insertions(+), 3 deletions(-) create mode 100644 docs/.nojekyll create mode 100644 docs/API.md create mode 100644 docs/interfaces/Egcd.md diff --git a/docs/.nojekyll b/docs/.nojekyll new file mode 100644 index 0000000..e2ac661 --- /dev/null +++ b/docs/.nojekyll @@ -0,0 +1 @@ +TypeDoc added this file to prevent GitHub Pages from using Jekyll. You can turn off this behavior by setting the `githubPages` option to false. \ No newline at end of file diff --git a/docs/API.md b/docs/API.md new file mode 100644 index 0000000..cb7c0ef --- /dev/null +++ b/docs/API.md @@ -0,0 +1,292 @@ +# bigint-mod-arith - v3.1.0 + +Some common functions for modular arithmetic using native JS implementation of BigInt + +## Table of contents + +### Interfaces + +- [Egcd](interfaces/Egcd.md) + +### Functions + +- [abs](API.md#abs) +- [bitLength](API.md#bitlength) +- [eGcd](API.md#egcd) +- [gcd](API.md#gcd) +- [lcm](API.md#lcm) +- [max](API.md#max) +- [min](API.md#min) +- [modInv](API.md#modinv) +- [modPow](API.md#modpow) +- [toZn](API.md#tozn) + +## Functions + +### abs + +▸ **abs**(`a`): `number` \| `bigint` + +Absolute value. abs(a)==a if a>=0. abs(a)==-a if a<0 + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `a` | `number` \| `bigint` | + +#### Returns + +`number` \| `bigint` + +The absolute value of a + +#### Defined in + +[abs.ts:8](https://github.com/juanelas/bigint-mod-arith/blob/905ba66/src/ts/abs.ts#L8) + +___ + +### bitLength + +▸ **bitLength**(`a`): `number` + +Returns the bitlength of a number + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `a` | `number` \| `bigint` | + +#### Returns + +`number` + +The bit length + +#### Defined in + +[bitLength.ts:7](https://github.com/juanelas/bigint-mod-arith/blob/905ba66/src/ts/bitLength.ts#L7) + +___ + +### eGcd + +▸ **eGcd**(`a`, `b`): [`Egcd`](interfaces/Egcd.md) + +An iterative implementation of the extended euclidean algorithm or extended greatest common divisor algorithm. +Take positive integers a, b as input, and return a triple (g, x, y), such that ax + by = g = gcd(a, b). + +**`Throws`** + +This excepction is thrown if a or b are less than 0 + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `a` | `number` \| `bigint` | +| `b` | `number` \| `bigint` | + +#### Returns + +[`Egcd`](interfaces/Egcd.md) + +A triple (g, x, y), such that ax + by = g = gcd(a, b). + +#### Defined in + +[egcd.ts:18](https://github.com/juanelas/bigint-mod-arith/blob/905ba66/src/ts/egcd.ts#L18) + +___ + +### gcd + +▸ **gcd**(`a`, `b`): `bigint` + +Greatest-common divisor of two integers based on the iterative binary algorithm. + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `a` | `number` \| `bigint` | +| `b` | `number` \| `bigint` | + +#### Returns + +`bigint` + +The greatest common divisor of a and b + +#### Defined in + +[gcd.ts:10](https://github.com/juanelas/bigint-mod-arith/blob/905ba66/src/ts/gcd.ts#L10) + +___ + +### lcm + +▸ **lcm**(`a`, `b`): `bigint` + +The least common multiple computed as abs(a*b)/gcd(a,b) + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `a` | `number` \| `bigint` | +| `b` | `number` \| `bigint` | + +#### Returns + +`bigint` + +The least common multiple of a and b + +#### Defined in + +[lcm.ts:10](https://github.com/juanelas/bigint-mod-arith/blob/905ba66/src/ts/lcm.ts#L10) + +___ + +### max + +▸ **max**(`a`, `b`): `number` \| `bigint` + +Maximum. max(a,b)==a if a>=b. max(a,b)==b if a<=b + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `a` | `number` \| `bigint` | +| `b` | `number` \| `bigint` | + +#### Returns + +`number` \| `bigint` + +Maximum of numbers a and b + +#### Defined in + +[max.ts:9](https://github.com/juanelas/bigint-mod-arith/blob/905ba66/src/ts/max.ts#L9) + +___ + +### min + +▸ **min**(`a`, `b`): `number` \| `bigint` + +Minimum. min(a,b)==b if a>=b. min(a,b)==a if a<=b + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `a` | `number` \| `bigint` | +| `b` | `number` \| `bigint` | + +#### Returns + +`number` \| `bigint` + +Minimum of numbers a and b + +#### Defined in + +[min.ts:9](https://github.com/juanelas/bigint-mod-arith/blob/905ba66/src/ts/min.ts#L9) + +___ + +### modInv + +▸ **modInv**(`a`, `n`): `bigint` + +Modular inverse. + +**`Throws`** + +Excpeption thorwn when a does not have inverse modulo n + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `a` | `number` \| `bigint` | The number to find an inverse for | +| `n` | `number` \| `bigint` | The modulo | + +#### Returns + +`bigint` + +The inverse modulo n + +#### Defined in + +[modInv.ts:14](https://github.com/juanelas/bigint-mod-arith/blob/905ba66/src/ts/modInv.ts#L14) + +___ + +### modPow + +▸ **modPow**(`b`, `e`, `n`): `bigint` + +Modular exponentiation b**e mod n. Currently using the right-to-left binary method + +**`Throws`** + +Excpeption thrown when n is not > 0 + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `b` | `number` \| `bigint` | base | +| `e` | `number` \| `bigint` | exponent | +| `n` | `number` \| `bigint` | modulo | + +#### Returns + +`bigint` + +b**e mod n + +#### Defined in + +[modPow.ts:16](https://github.com/juanelas/bigint-mod-arith/blob/905ba66/src/ts/modPow.ts#L16) + +___ + +### toZn + +▸ **toZn**(`a`, `n`): `bigint` + +Finds the smallest positive element that is congruent to a in modulo n + +**`Remarks`** + +a and b must be the same type, either number or bigint + +**`Throws`** + +Excpeption thrown when n is not > 0 + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `a` | `number` \| `bigint` | An integer | +| `n` | `number` \| `bigint` | The modulo | + +#### Returns + +`bigint` + +A bigint with the smallest positive representation of a modulo n + +#### Defined in + +[toZn.ts:15](https://github.com/juanelas/bigint-mod-arith/blob/905ba66/src/ts/toZn.ts#L15) diff --git a/docs/interfaces/Egcd.md b/docs/interfaces/Egcd.md new file mode 100644 index 0000000..5b7ff14 --- /dev/null +++ b/docs/interfaces/Egcd.md @@ -0,0 +1,39 @@ +# Interface: Egcd + +## Table of contents + +### Properties + +- [g](Egcd.md#g) +- [x](Egcd.md#x) +- [y](Egcd.md#y) + +## Properties + +### g + +• **g**: `bigint` + +#### Defined in + +[egcd.ts:2](https://github.com/juanelas/bigint-mod-arith/blob/905ba66/src/ts/egcd.ts#L2) + +___ + +### x + +• **x**: `bigint` + +#### Defined in + +[egcd.ts:3](https://github.com/juanelas/bigint-mod-arith/blob/905ba66/src/ts/egcd.ts#L3) + +___ + +### y + +• **y**: `bigint` + +#### Defined in + +[egcd.ts:4](https://github.com/juanelas/bigint-mod-arith/blob/905ba66/src/ts/egcd.ts#L4) diff --git a/package-lock.json b/package-lock.json index cc1614a..e6f4387 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "bigint-mod-arith", - "version": "3.0.2", + "version": "3.1.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "bigint-mod-arith", - "version": "3.0.2", + "version": "3.1.0", "license": "MIT", "devDependencies": { "@rollup/plugin-commonjs": "^22.0.0", diff --git a/package.json b/package.json index 6fba31a..6021ed0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bigint-mod-arith", - "version": "3.0.2", + "version": "3.1.0", "description": "Some common functions for modular arithmetic using native JS implementation of BigInt", "keywords": [ "modular arithmetics",