finitefields 0.0.3 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -0
- package/galois.d.ts.map +1 -0
- package/galois.js.map +1 -0
- package/galois.ts +143 -0
- package/main.js +1 -1
- package/main.js.map +1 -1
- package/main.ts +1 -1
- package/package.json +1 -1
- package/.lesshst +0 -3
- package/.viminfo +0 -112
- package/Makefile +0 -13
- package/main.d.ts +0 -2
- package/polynomial.d.ts +0 -37
- package/polynomial.js +0 -129
package/README.md
ADDED
package/galois.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"galois.d.ts","sourceRoot":"","sources":["galois.ts"],"names":[],"mappings":"AAWA,QAAA,IAAI,IAAI,EAAC,KAAK,CAAC;AAwFf,UAAU,OAAO;IACb,MAAM,EAAC,MAAI,IAAI,CAAC;IAChB,WAAW,EAAC,QAAQ,CAAC;CACxB;AAED,UAAU,KAAK;IACX,OAAO,EAAE,CAAC,CAAC,EAAC,MAAM,EAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,CAAC,EAAC,MAAM,KAAG,OAAO,CAAC;IACtD,SAAS,EAAE,CAAC,CAAC,EAAC,MAAM,KAAG,MAAM,CAAC;IAC9B,GAAG,EAAE,CAAC,MAAM,EAAC,MAAM,EAAC,GAAG,EAAC,MAAM,KAAG,MAAM,CAAC;CAC3C;AAED,cAAM,EAAG,YAAW,OAAO;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,GAAG,CAA8B;IACzC,OAAO,CAAC,GAAG,CAAkB;IAC7B,OAAO,CAAC,GAAG,CAAkB;IAC7B,OAAO,CAAC,GAAG,CAAkB;IAEtB,MAAM,IAAI,IAAI;gBAST,KAAK,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM;CAazC;AAED,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC"}
|
package/galois.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"galois.js","sourceRoot":"","sources":["galois.ts"],"names":[],"mappings":"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"}
|
package/galois.ts
ADDED
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* galois fields
|
|
3
|
+
*
|
|
4
|
+
* finitefields package by @dr-Jonas-Birch
|
|
5
|
+
*
|
|
6
|
+
* 2026
|
|
7
|
+
*
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
let log:(...x:any[])=>void;
|
|
11
|
+
let fail:(...x:any[])=>never;
|
|
12
|
+
let Util:Iutil;
|
|
13
|
+
|
|
14
|
+
log = console.log;
|
|
15
|
+
fail = (...args:any[]): never => {
|
|
16
|
+
console.error(...args);
|
|
17
|
+
throw new Error(args.toString());
|
|
18
|
+
|
|
19
|
+
return void 0 as never;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const arithmetics = (p:bigint,op:fieldops) =>
|
|
23
|
+
(op==fieldops.$add) ?
|
|
24
|
+
(a:bigint,b:bigint) => (a+b)%p :
|
|
25
|
+
(op==fieldops.$sub) ?
|
|
26
|
+
(a:bigint,b:bigint) => (a-b)%p :
|
|
27
|
+
(op==fieldops.$mul) ?
|
|
28
|
+
(a:bigint,b:bigint) => (a*b)%p :
|
|
29
|
+
(op==fieldops.$div) ?
|
|
30
|
+
(a:bigint,b:bigint) => (b%p)?(a/b)%p:fail() :
|
|
31
|
+
fail();
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
Util = {
|
|
35
|
+
countbits(x:bigint): bigint {
|
|
36
|
+
let n:bigint;
|
|
37
|
+
let y:bigint;
|
|
38
|
+
|
|
39
|
+
for (n=0n, y=x; y; y>>=1n, n++);
|
|
40
|
+
|
|
41
|
+
return n;
|
|
42
|
+
},
|
|
43
|
+
|
|
44
|
+
isprime(p:bigint, bitlen:bigint=256n, s:number=12): boolean {
|
|
45
|
+
let n:number;
|
|
46
|
+
let r:bigint;
|
|
47
|
+
let ret:boolean;
|
|
48
|
+
|
|
49
|
+
if (p<2n)
|
|
50
|
+
return true;
|
|
51
|
+
|
|
52
|
+
for (n=0, ret=true; n<s; n++) {
|
|
53
|
+
r = this.rnd(bitlen,(p-1n));
|
|
54
|
+
r += 1n;
|
|
55
|
+
if (((r**(p-1n))%p) != 1n) {
|
|
56
|
+
ret = false;
|
|
57
|
+
break;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
return ret;
|
|
62
|
+
},
|
|
63
|
+
|
|
64
|
+
rnd(bitlen:bigint, max:bigint=0n): bigint {
|
|
65
|
+
let rnd_:(b:bigint,n:bigint)=>bigint;
|
|
66
|
+
let mkrnd:()=>bigint;
|
|
67
|
+
let val:bigint;
|
|
68
|
+
|
|
69
|
+
mkrnd = (): bigint =>
|
|
70
|
+
BigInt(
|
|
71
|
+
(Math.floor(Math.random()*10000000000000000))
|
|
72
|
+
);
|
|
73
|
+
|
|
74
|
+
rnd_ = (b:bigint,n:bigint): bigint => {
|
|
75
|
+
if (b < 1)
|
|
76
|
+
return n;
|
|
77
|
+
else
|
|
78
|
+
return rnd_((b-=58n),
|
|
79
|
+
((n<<58n)
|
|
80
|
+
|mkrnd()));
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
val = rnd_(bitlen, mkrnd());
|
|
84
|
+
while (this.countbits(val>>=1n)>bitlen);
|
|
85
|
+
|
|
86
|
+
if (max && (val>max))
|
|
87
|
+
return (val%max);
|
|
88
|
+
else
|
|
89
|
+
return val;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
enum fieldops {
|
|
94
|
+
$add,
|
|
95
|
+
$sub,
|
|
96
|
+
$mul,
|
|
97
|
+
$div
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
interface Igalois {
|
|
101
|
+
verify:()=>void;
|
|
102
|
+
constructor:Function;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
interface Iutil {
|
|
106
|
+
isprime: (p:bigint,bitlen?:bigint,s?:number)=>boolean;
|
|
107
|
+
countbits: (x:bigint)=>bigint;
|
|
108
|
+
rnd: (bitlen:bigint,max:bigint)=>bigint;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
class GF implements Igalois {
|
|
112
|
+
private modulus: bigint;
|
|
113
|
+
private bitlen: bigint;
|
|
114
|
+
private add: (a:bigint,b:bigint)=>bigint;
|
|
115
|
+
private sub: typeof this.add;
|
|
116
|
+
private mul: typeof this.add;
|
|
117
|
+
private div: typeof this.add;
|
|
118
|
+
|
|
119
|
+
public verify(): void {
|
|
120
|
+
if (!Util.isprime(this.modulus))
|
|
121
|
+
return fail(this.modulus, 'needs to be prime');
|
|
122
|
+
else if (Util.countbits(this.modulus) > this.bitlen)
|
|
123
|
+
return fail(this.modulus, 'does not fit in bitlen:', this.bitlen);
|
|
124
|
+
|
|
125
|
+
return void 0;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
constructor(field:bigint,bitlen:bigint) {
|
|
129
|
+
this.modulus = field;
|
|
130
|
+
this.bitlen = bitlen;
|
|
131
|
+
this.verify();
|
|
132
|
+
|
|
133
|
+
this.add = arithmetics(this.modulus, fieldops.$add);
|
|
134
|
+
this.sub = arithmetics(this.modulus, fieldops.$sub);
|
|
135
|
+
this.mul = arithmetics(this.modulus, fieldops.$mul);
|
|
136
|
+
this.div = arithmetics(this.modulus, fieldops.$div);
|
|
137
|
+
|
|
138
|
+
return this;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
export { Util, GF };
|
package/main.js
CHANGED
|
@@ -17,7 +17,7 @@ p1 = new Polynomial([x0, x1, x2, x3], 2n);
|
|
|
17
17
|
p2 = new Polynomial({ tobject: 0n, x3: 1n, x2: 0n, x: 1n, 1: 1n }, 2n);
|
|
18
18
|
// log(p1, " + ", p2, " =");
|
|
19
19
|
// p3 = Polynomial.add(p1,p2);
|
|
20
|
-
p3 = new Polynomial(
|
|
20
|
+
p3 = new Polynomial(1n << 254n, 2n);
|
|
21
21
|
log(p3, p3.eval());
|
|
22
22
|
// log(p3.eval());
|
|
23
23
|
//# sourceMappingURL=main.js.map
|
package/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["main.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,IAAI,GAAsB,CAAC;AAC3B,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;AAElB,IAAI,EAAa,CAAC;AAClB,IAAI,EAAa,CAAC;AAClB,IAAI,EAAa,CAAC;AAClB,IAAI,EAAS,CAAC;AACd,IAAI,EAAS,CAAC;AACd,IAAI,EAAS,CAAC;AACd,IAAI,EAAS,CAAC;AAEd,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACf,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACf,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACf,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AAEf,EAAE,GAAG,IAAI,UAAU,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;AAC1C,EAAE,GAAG,IAAI,UAAU,CAAC,EAAE,OAAO,EAAC,EAAE,EAAE,EAAE,EAAC,EAAE,EAAE,EAAE,EAAC,EAAE,EAAE,CAAC,EAAC,EAAE,EAAE,CAAC,EAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AAClE,4BAA4B;AAC5B,8BAA8B;AAC9B,EAAE,GAAG,IAAI,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["main.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,IAAI,GAAsB,CAAC;AAC3B,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;AAElB,IAAI,EAAa,CAAC;AAClB,IAAI,EAAa,CAAC;AAClB,IAAI,EAAa,CAAC;AAClB,IAAI,EAAS,CAAC;AACd,IAAI,EAAS,CAAC;AACd,IAAI,EAAS,CAAC;AACd,IAAI,EAAS,CAAC;AAEd,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACf,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACf,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACf,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AAEf,EAAE,GAAG,IAAI,UAAU,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;AAC1C,EAAE,GAAG,IAAI,UAAU,CAAC,EAAE,OAAO,EAAC,EAAE,EAAE,EAAE,EAAC,EAAE,EAAE,EAAE,EAAC,EAAE,EAAE,CAAC,EAAC,EAAE,EAAE,CAAC,EAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AAClE,4BAA4B;AAC5B,8BAA8B;AAC9B,EAAE,GAAG,IAAI,UAAU,CAAC,EAAE,IAAE,IAAI,EAAE,EAAE,CAAC,CAAC;AAElC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;AACnB,kBAAkB"}
|
package/main.ts
CHANGED
|
@@ -21,7 +21,7 @@ p1 = new Polynomial([x0, x1, x2, x3], 2n);
|
|
|
21
21
|
p2 = new Polynomial({ tobject:0n, x3:1n, x2:0n, x:1n, 1:1n }, 2n);
|
|
22
22
|
// log(p1, " + ", p2, " =");
|
|
23
23
|
// p3 = Polynomial.add(p1,p2);
|
|
24
|
-
p3 = new Polynomial(
|
|
24
|
+
p3 = new Polynomial(1n<<254n, 2n);
|
|
25
25
|
|
|
26
26
|
log(p3, p3.eval());
|
|
27
27
|
// log(p3.eval());
|
package/package.json
CHANGED
package/.lesshst
DELETED
package/.viminfo
DELETED
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
# This viminfo file was generated by Vim 9.0.
|
|
2
|
-
# You may edit it if you're careful!
|
|
3
|
-
|
|
4
|
-
# Viminfo version
|
|
5
|
-
|1,4
|
|
6
|
-
|
|
7
|
-
# Value of 'encoding' when this file was written
|
|
8
|
-
*encoding=latin1
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
# hlsearch on (H) or off (h):
|
|
12
|
-
~h
|
|
13
|
-
# Command Line History (newest to oldest):
|
|
14
|
-
:wq
|
|
15
|
-
|2,0,1770671027,,"wq"
|
|
16
|
-
|
|
17
|
-
# Search String History (newest to oldest):
|
|
18
|
-
|
|
19
|
-
# Expression History (newest to oldest):
|
|
20
|
-
|
|
21
|
-
# Input Line History (newest to oldest):
|
|
22
|
-
|
|
23
|
-
# Debug Line History (newest to oldest):
|
|
24
|
-
|
|
25
|
-
# Registers:
|
|
26
|
-
""- CHAR 0
|
|
27
|
-
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
|
|
28
|
-
|3,1,36,0,1,0,1770671022,"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"
|
|
29
|
-
|
|
30
|
-
# File marks:
|
|
31
|
-
'0 1 72 ~/.npmrc
|
|
32
|
-
|4,48,1,72,1770671027,"~/.npmrc"
|
|
33
|
-
'1 1 39 /home/jobj/token
|
|
34
|
-
|4,49,1,39,1770670606,"/home/jobj/token"
|
|
35
|
-
'2 5 11 ~/.gitignore
|
|
36
|
-
|4,50,5,11,1770670071,"~/.gitignore"
|
|
37
|
-
'3 4 8 ~/.gitignore
|
|
38
|
-
|4,51,4,8,1770670048,"~/.gitignore"
|
|
39
|
-
'4 4 8 ~/.gitignore
|
|
40
|
-
|4,52,4,8,1770670048,"~/.gitignore"
|
|
41
|
-
|
|
42
|
-
# Jumplist (newest first):
|
|
43
|
-
-' 1 72 ~/.npmrc
|
|
44
|
-
|4,39,1,72,1770671027,"~/.npmrc"
|
|
45
|
-
-' 1 39 /home/jobj/token
|
|
46
|
-
|4,39,1,39,1770670606,"/home/jobj/token"
|
|
47
|
-
-' 1 39 /home/jobj/token
|
|
48
|
-
|4,39,1,39,1770670606,"/home/jobj/token"
|
|
49
|
-
-' 5 11 ~/.gitignore
|
|
50
|
-
|4,39,5,11,1770670071,"~/.gitignore"
|
|
51
|
-
-' 5 11 ~/.gitignore
|
|
52
|
-
|4,39,5,11,1770670071,"~/.gitignore"
|
|
53
|
-
-' 5 11 ~/.gitignore
|
|
54
|
-
|4,39,5,11,1770670071,"~/.gitignore"
|
|
55
|
-
-' 5 11 ~/.gitignore
|
|
56
|
-
|4,39,5,11,1770670071,"~/.gitignore"
|
|
57
|
-
-' 4 8 ~/.gitignore
|
|
58
|
-
|4,39,4,8,1770670065,"~/.gitignore"
|
|
59
|
-
-' 4 8 ~/.gitignore
|
|
60
|
-
|4,39,4,8,1770670065,"~/.gitignore"
|
|
61
|
-
-' 4 8 ~/.gitignore
|
|
62
|
-
|4,39,4,8,1770670065,"~/.gitignore"
|
|
63
|
-
-' 4 8 ~/.gitignore
|
|
64
|
-
|4,39,4,8,1770670065,"~/.gitignore"
|
|
65
|
-
-' 4 8 ~/.gitignore
|
|
66
|
-
|4,39,4,8,1770670048,"~/.gitignore"
|
|
67
|
-
-' 4 8 ~/.gitignore
|
|
68
|
-
|4,39,4,8,1770670048,"~/.gitignore"
|
|
69
|
-
-' 4 8 ~/.gitignore
|
|
70
|
-
|4,39,4,8,1770670048,"~/.gitignore"
|
|
71
|
-
-' 4 8 ~/.gitignore
|
|
72
|
-
|4,39,4,8,1770670048,"~/.gitignore"
|
|
73
|
-
-' 1 0 ~/.gitignore
|
|
74
|
-
|4,39,1,0,1770670030,"~/.gitignore"
|
|
75
|
-
-' 1 0 ~/.gitignore
|
|
76
|
-
|4,39,1,0,1770670030,"~/.gitignore"
|
|
77
|
-
-' 1 0 ~/.gitignore
|
|
78
|
-
|4,39,1,0,1770670030,"~/.gitignore"
|
|
79
|
-
-' 1 0 ~/.gitignore
|
|
80
|
-
|4,39,1,0,1770670030,"~/.gitignore"
|
|
81
|
-
-' 1 0 ~/.gitignore
|
|
82
|
-
|4,39,1,0,1770670030,"~/.gitignore"
|
|
83
|
-
-' 1 0 ~/.gitignore
|
|
84
|
-
|4,39,1,0,1770670030,"~/.gitignore"
|
|
85
|
-
-' 1 0 ~/.gitignore
|
|
86
|
-
|4,39,1,0,1770670030,"~/.gitignore"
|
|
87
|
-
-' 1 0 ~/.gitignore
|
|
88
|
-
|4,39,1,0,1770670030,"~/.gitignore"
|
|
89
|
-
|
|
90
|
-
# History of marks within files (newest to oldest):
|
|
91
|
-
|
|
92
|
-
> ~/.npmrc
|
|
93
|
-
* 1770671026 0
|
|
94
|
-
" 1 72
|
|
95
|
-
^ 1 73
|
|
96
|
-
. 1 57
|
|
97
|
-
+ 1 57
|
|
98
|
-
|
|
99
|
-
> /home/jobj/token
|
|
100
|
-
* 1770670605 0
|
|
101
|
-
" 1 39
|
|
102
|
-
^ 1 40
|
|
103
|
-
. 1 24
|
|
104
|
-
+ 1 24
|
|
105
|
-
|
|
106
|
-
> ~/.gitignore
|
|
107
|
-
* 1770670070 0
|
|
108
|
-
" 5 11
|
|
109
|
-
^ 5 12
|
|
110
|
-
. 5 11
|
|
111
|
-
+ 4 8
|
|
112
|
-
+ 5 11
|
package/Makefile
DELETED
package/main.d.ts
DELETED
package/polynomial.d.ts
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
declare let zip: (xs: bigint[], ys: bigint[]) => zipped;
|
|
2
|
-
type zipitem = {
|
|
3
|
-
x: bigint;
|
|
4
|
-
y: bigint;
|
|
5
|
-
};
|
|
6
|
-
type zipped = zipitem[];
|
|
7
|
-
type xs = 'tobject' | '1' | 'x' | 'x2' | 'x3' | 'x4' | 'x5' | 'x6' | 'x7';
|
|
8
|
-
type Polysource = bigint | bigint[] | Tobject;
|
|
9
|
-
type Tobject = {
|
|
10
|
-
[K in xs]?: bigint;
|
|
11
|
-
};
|
|
12
|
-
interface Ipolynomial {
|
|
13
|
-
fromarr(src: bigint[]): void;
|
|
14
|
-
fromobj(src: Tobject): void;
|
|
15
|
-
fromint(src: bigint): void;
|
|
16
|
-
verifyorder(order: bigint): boolean;
|
|
17
|
-
eval(): bigint;
|
|
18
|
-
constructor: Function;
|
|
19
|
-
}
|
|
20
|
-
declare class Polynomial implements Ipolynomial {
|
|
21
|
-
private data;
|
|
22
|
-
private degree;
|
|
23
|
-
private order;
|
|
24
|
-
static int2pol(src: bigint): bigint[];
|
|
25
|
-
static int2pol_(val: bigint, arr: bigint[]): bigint[];
|
|
26
|
-
static evaluate(src: bigint[], order: bigint): bigint;
|
|
27
|
-
static evaluate_(src: bigint[], order: bigint, val: bigint): bigint;
|
|
28
|
-
static add(a: Polynomial, b: Polynomial): Polynomial;
|
|
29
|
-
constructor(src: Polysource, order: bigint);
|
|
30
|
-
fromarr(src: bigint[]): void;
|
|
31
|
-
fromobj(src: Tobject): void;
|
|
32
|
-
fromint(src: bigint): void;
|
|
33
|
-
verifyorder(order: bigint): boolean;
|
|
34
|
-
eval(): bigint;
|
|
35
|
-
}
|
|
36
|
-
export { Polynomial, zip };
|
|
37
|
-
//# sourceMappingURL=polynomial.d.ts.map
|
package/polynomial.js
DELETED
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* polynomial data structure
|
|
3
|
-
*
|
|
4
|
-
* finitefields package by @dr-Jonas-Birch
|
|
5
|
-
*
|
|
6
|
-
* 2026
|
|
7
|
-
*
|
|
8
|
-
*/
|
|
9
|
-
let fail;
|
|
10
|
-
let log;
|
|
11
|
-
let zip;
|
|
12
|
-
fail = () => {
|
|
13
|
-
throw new Error();
|
|
14
|
-
return void 0;
|
|
15
|
-
};
|
|
16
|
-
zip = (xs, ys) => (xs.length == ys.length) ? xs
|
|
17
|
-
.map((x, idx) => ({ x, y: (ys[idx] || 0n) })) :
|
|
18
|
-
fail();
|
|
19
|
-
log = console.log;
|
|
20
|
-
class Polynomial {
|
|
21
|
-
data;
|
|
22
|
-
degree;
|
|
23
|
-
order;
|
|
24
|
-
static int2pol(src) {
|
|
25
|
-
return Polynomial.int2pol_(src, []);
|
|
26
|
-
}
|
|
27
|
-
static int2pol_(val, arr) {
|
|
28
|
-
let x;
|
|
29
|
-
let y;
|
|
30
|
-
let bit;
|
|
31
|
-
if (!val)
|
|
32
|
-
return arr;
|
|
33
|
-
y = (val >> 1n);
|
|
34
|
-
bit = (val & 1n);
|
|
35
|
-
x = new Array(bit, ...arr);
|
|
36
|
-
return Polynomial.int2pol_(y, x);
|
|
37
|
-
}
|
|
38
|
-
static evaluate(src, order) {
|
|
39
|
-
return Polynomial.evaluate_(src, order, 0n);
|
|
40
|
-
}
|
|
41
|
-
static evaluate_(src, order, val) {
|
|
42
|
-
let x;
|
|
43
|
-
let y;
|
|
44
|
-
let z;
|
|
45
|
-
let arr;
|
|
46
|
-
if (!src.length)
|
|
47
|
-
return val;
|
|
48
|
-
else
|
|
49
|
-
y = (order * val);
|
|
50
|
-
arr = new Array(...src);
|
|
51
|
-
z = arr.shift()
|
|
52
|
-
|| 0n;
|
|
53
|
-
x = (y + z);
|
|
54
|
-
return Polynomial.evaluate_(arr, order, x);
|
|
55
|
-
}
|
|
56
|
-
static add(a, b) {
|
|
57
|
-
let z;
|
|
58
|
-
let p;
|
|
59
|
-
let arr;
|
|
60
|
-
z = zip(a.data, b.data);
|
|
61
|
-
arr = z
|
|
62
|
-
.map(({ x, y }) => ((x + y) % BigInt(a.order)));
|
|
63
|
-
return new Polynomial(arr, a.order);
|
|
64
|
-
}
|
|
65
|
-
constructor(src, order) {
|
|
66
|
-
this.data = [];
|
|
67
|
-
this.degree = 0;
|
|
68
|
-
if (!src)
|
|
69
|
-
fail();
|
|
70
|
-
switch (true) {
|
|
71
|
-
case src instanceof Array:
|
|
72
|
-
this.fromarr(src);
|
|
73
|
-
break;
|
|
74
|
-
case typeof src === 'bigint':
|
|
75
|
-
if (order != 2n)
|
|
76
|
-
fail();
|
|
77
|
-
this.fromint(src);
|
|
78
|
-
break;
|
|
79
|
-
case ((typeof src !== 'bigint') && ('tobject' in src)):
|
|
80
|
-
this.fromobj(src);
|
|
81
|
-
break;
|
|
82
|
-
default:
|
|
83
|
-
fail();
|
|
84
|
-
break;
|
|
85
|
-
}
|
|
86
|
-
if (this.verifyorder(order))
|
|
87
|
-
this.order = order;
|
|
88
|
-
else
|
|
89
|
-
fail();
|
|
90
|
-
return this;
|
|
91
|
-
}
|
|
92
|
-
fromarr(src) {
|
|
93
|
-
if (!src)
|
|
94
|
-
fail();
|
|
95
|
-
this.data = src;
|
|
96
|
-
this.degree = this.data.length;
|
|
97
|
-
return void 0;
|
|
98
|
-
}
|
|
99
|
-
fromobj(src) {
|
|
100
|
-
if (!src)
|
|
101
|
-
fail();
|
|
102
|
-
const { tobject, ...obj } = src;
|
|
103
|
-
this.data = Object.values(obj);
|
|
104
|
-
this.degree = this.data.length;
|
|
105
|
-
return void 0;
|
|
106
|
-
}
|
|
107
|
-
fromint(src) {
|
|
108
|
-
if (!src)
|
|
109
|
-
fail();
|
|
110
|
-
this.data = Polynomial.int2pol(src);
|
|
111
|
-
this.degree = this.data.length;
|
|
112
|
-
return void 0;
|
|
113
|
-
}
|
|
114
|
-
verifyorder(order) {
|
|
115
|
-
let arr;
|
|
116
|
-
if (!order)
|
|
117
|
-
fail();
|
|
118
|
-
else if (!this.degree)
|
|
119
|
-
return true;
|
|
120
|
-
arr = this.data
|
|
121
|
-
.map((x) => !(x >= order));
|
|
122
|
-
return arr.every((x) => x);
|
|
123
|
-
}
|
|
124
|
-
eval() {
|
|
125
|
-
return Polynomial.evaluate(this.data, this.order);
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
export { Polynomial, zip };
|
|
129
|
-
//# sourceMappingURL=polynomial.js.map
|