@stevenvo780/st-lang 4.9.0 → 4.11.0
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/dist/logic/profiles/natural-deduction-nk/formula.d.ts +18 -0
- package/dist/logic/profiles/natural-deduction-nk/formula.d.ts.map +1 -0
- package/dist/logic/profiles/natural-deduction-nk/formula.js +102 -0
- package/dist/logic/profiles/natural-deduction-nk/formula.js.map +1 -0
- package/dist/logic/profiles/natural-deduction-nk/index.d.ts +5 -0
- package/dist/logic/profiles/natural-deduction-nk/index.d.ts.map +1 -0
- package/dist/logic/profiles/natural-deduction-nk/index.js +28 -0
- package/dist/logic/profiles/natural-deduction-nk/index.js.map +1 -0
- package/dist/logic/profiles/natural-deduction-nk/prover.d.ts +49 -0
- package/dist/logic/profiles/natural-deduction-nk/prover.d.ts.map +1 -0
- package/dist/logic/profiles/natural-deduction-nk/prover.js +557 -0
- package/dist/logic/profiles/natural-deduction-nk/prover.js.map +1 -0
- package/dist/logic/profiles/natural-deduction-nk/types.d.ts +48 -0
- package/dist/logic/profiles/natural-deduction-nk/types.d.ts.map +1 -0
- package/dist/logic/profiles/natural-deduction-nk/types.js +35 -0
- package/dist/logic/profiles/natural-deduction-nk/types.js.map +1 -0
- package/dist/proof-systems/distributed-exchange/index.d.ts +101 -0
- package/dist/proof-systems/distributed-exchange/index.d.ts.map +1 -0
- package/dist/proof-systems/distributed-exchange/index.js +408 -0
- package/dist/proof-systems/distributed-exchange/index.js.map +1 -0
- package/dist/reasoning/automata/dfa.d.ts +17 -0
- package/dist/reasoning/automata/dfa.d.ts.map +1 -0
- package/dist/reasoning/automata/dfa.js +276 -0
- package/dist/reasoning/automata/dfa.js.map +1 -0
- package/dist/reasoning/automata/index.d.ts +8 -0
- package/dist/reasoning/automata/index.d.ts.map +1 -0
- package/dist/reasoning/automata/index.js +64 -0
- package/dist/reasoning/automata/index.js.map +1 -0
- package/dist/reasoning/automata/languages.d.ts +10 -0
- package/dist/reasoning/automata/languages.d.ts.map +1 -0
- package/dist/reasoning/automata/languages.js +78 -0
- package/dist/reasoning/automata/languages.js.map +1 -0
- package/dist/reasoning/automata/nfa.d.ts +8 -0
- package/dist/reasoning/automata/nfa.d.ts.map +1 -0
- package/dist/reasoning/automata/nfa.js +122 -0
- package/dist/reasoning/automata/nfa.js.map +1 -0
- package/dist/reasoning/automata/pda.d.ts +10 -0
- package/dist/reasoning/automata/pda.d.ts.map +1 -0
- package/dist/reasoning/automata/pda.js +169 -0
- package/dist/reasoning/automata/pda.js.map +1 -0
- package/dist/reasoning/automata/regex.d.ts +6 -0
- package/dist/reasoning/automata/regex.d.ts.map +1 -0
- package/dist/reasoning/automata/regex.js +259 -0
- package/dist/reasoning/automata/regex.js.map +1 -0
- package/dist/reasoning/automata/types.d.ts +69 -0
- package/dist/reasoning/automata/types.d.ts.map +1 -0
- package/dist/reasoning/automata/types.js +29 -0
- package/dist/reasoning/automata/types.js.map +1 -0
- package/dist/reasoning/computability/index.d.ts +239 -0
- package/dist/reasoning/computability/index.d.ts.map +1 -0
- package/dist/reasoning/computability/index.js +851 -0
- package/dist/reasoning/computability/index.js.map +1 -0
- package/dist/reasoning/graph-theory/index.d.ts +63 -0
- package/dist/reasoning/graph-theory/index.d.ts.map +1 -0
- package/dist/reasoning/graph-theory/index.js +1043 -0
- package/dist/reasoning/graph-theory/index.js.map +1 -0
- package/dist/reasoning/group-presentation/cayley.d.ts +8 -0
- package/dist/reasoning/group-presentation/cayley.d.ts.map +1 -0
- package/dist/reasoning/group-presentation/cayley.js +38 -0
- package/dist/reasoning/group-presentation/cayley.js.map +1 -0
- package/dist/reasoning/group-presentation/index.d.ts +8 -0
- package/dist/reasoning/group-presentation/index.d.ts.map +1 -0
- package/dist/reasoning/group-presentation/index.js +36 -0
- package/dist/reasoning/group-presentation/index.js.map +1 -0
- package/dist/reasoning/group-presentation/standard-groups.d.ts +6 -0
- package/dist/reasoning/group-presentation/standard-groups.d.ts.map +1 -0
- package/dist/reasoning/group-presentation/standard-groups.js +93 -0
- package/dist/reasoning/group-presentation/standard-groups.js.map +1 -0
- package/dist/reasoning/group-presentation/todd-coxeter.d.ts +10 -0
- package/dist/reasoning/group-presentation/todd-coxeter.d.ts.map +1 -0
- package/dist/reasoning/group-presentation/todd-coxeter.js +362 -0
- package/dist/reasoning/group-presentation/todd-coxeter.js.map +1 -0
- package/dist/reasoning/group-presentation/types.d.ts +7 -0
- package/dist/reasoning/group-presentation/types.d.ts.map +1 -0
- package/dist/reasoning/group-presentation/types.js +22 -0
- package/dist/reasoning/group-presentation/types.js.map +1 -0
- package/dist/reasoning/group-presentation/words.d.ts +10 -0
- package/dist/reasoning/group-presentation/words.d.ts.map +1 -0
- package/dist/reasoning/group-presentation/words.js +109 -0
- package/dist/reasoning/group-presentation/words.js.map +1 -0
- package/dist/reasoning/number-theory/crt.d.ts +9 -0
- package/dist/reasoning/number-theory/crt.d.ts.map +1 -0
- package/dist/reasoning/number-theory/crt.js +39 -0
- package/dist/reasoning/number-theory/crt.js.map +1 -0
- package/dist/reasoning/number-theory/diophantine.d.ts +10 -0
- package/dist/reasoning/number-theory/diophantine.d.ts.map +1 -0
- package/dist/reasoning/number-theory/diophantine.js +87 -0
- package/dist/reasoning/number-theory/diophantine.js.map +1 -0
- package/dist/reasoning/number-theory/factorization.d.ts +12 -0
- package/dist/reasoning/number-theory/factorization.d.ts.map +1 -0
- package/dist/reasoning/number-theory/factorization.js +136 -0
- package/dist/reasoning/number-theory/factorization.js.map +1 -0
- package/dist/reasoning/number-theory/gcd.d.ts +8 -0
- package/dist/reasoning/number-theory/gcd.d.ts.map +1 -0
- package/dist/reasoning/number-theory/gcd.js +51 -0
- package/dist/reasoning/number-theory/gcd.js.map +1 -0
- package/dist/reasoning/number-theory/index.d.ts +9 -0
- package/dist/reasoning/number-theory/index.d.ts.map +1 -0
- package/dist/reasoning/number-theory/index.js +46 -0
- package/dist/reasoning/number-theory/index.js.map +1 -0
- package/dist/reasoning/number-theory/modular.d.ts +6 -0
- package/dist/reasoning/number-theory/modular.d.ts.map +1 -0
- package/dist/reasoning/number-theory/modular.js +75 -0
- package/dist/reasoning/number-theory/modular.js.map +1 -0
- package/dist/reasoning/number-theory/primality.d.ts +6 -0
- package/dist/reasoning/number-theory/primality.d.ts.map +1 -0
- package/dist/reasoning/number-theory/primality.js +144 -0
- package/dist/reasoning/number-theory/primality.js.map +1 -0
- package/dist/reasoning/number-theory/symbols.d.ts +3 -0
- package/dist/reasoning/number-theory/symbols.d.ts.map +1 -0
- package/dist/reasoning/number-theory/symbols.js +57 -0
- package/dist/reasoning/number-theory/symbols.js.map +1 -0
- package/dist/reasoning/real-analysis/index.d.ts +127 -0
- package/dist/reasoning/real-analysis/index.d.ts.map +1 -0
- package/dist/reasoning/real-analysis/index.js +638 -0
- package/dist/reasoning/real-analysis/index.js.map +1 -0
- package/dist/reasoning/topology/index.d.ts +41 -0
- package/dist/reasoning/topology/index.d.ts.map +1 -0
- package/dist/reasoning/topology/index.js +739 -0
- package/dist/reasoning/topology/index.js.map +1 -0
- package/dist/tests/logic/profiles/natural-deduction-nk/nk.test.d.ts +2 -0
- package/dist/tests/logic/profiles/natural-deduction-nk/nk.test.d.ts.map +1 -0
- package/dist/tests/logic/profiles/natural-deduction-nk/nk.test.js +288 -0
- package/dist/tests/logic/profiles/natural-deduction-nk/nk.test.js.map +1 -0
- package/dist/tests/proof-systems/distributed-exchange/distributed-exchange.test.d.ts +2 -0
- package/dist/tests/proof-systems/distributed-exchange/distributed-exchange.test.d.ts.map +1 -0
- package/dist/tests/proof-systems/distributed-exchange/distributed-exchange.test.js +328 -0
- package/dist/tests/proof-systems/distributed-exchange/distributed-exchange.test.js.map +1 -0
- package/dist/tests/reasoning/automata/automata.test.d.ts +2 -0
- package/dist/tests/reasoning/automata/automata.test.d.ts.map +1 -0
- package/dist/tests/reasoning/automata/automata.test.js +310 -0
- package/dist/tests/reasoning/automata/automata.test.js.map +1 -0
- package/dist/tests/reasoning/computability/computability.test.d.ts +2 -0
- package/dist/tests/reasoning/computability/computability.test.d.ts.map +1 -0
- package/dist/tests/reasoning/computability/computability.test.js +246 -0
- package/dist/tests/reasoning/computability/computability.test.js.map +1 -0
- package/dist/tests/reasoning/graph-theory/graph-theory.test.d.ts +2 -0
- package/dist/tests/reasoning/graph-theory/graph-theory.test.d.ts.map +1 -0
- package/dist/tests/reasoning/graph-theory/graph-theory.test.js +363 -0
- package/dist/tests/reasoning/graph-theory/graph-theory.test.js.map +1 -0
- package/dist/tests/reasoning/group-presentation/group-presentation.test.d.ts +2 -0
- package/dist/tests/reasoning/group-presentation/group-presentation.test.d.ts.map +1 -0
- package/dist/tests/reasoning/group-presentation/group-presentation.test.js +229 -0
- package/dist/tests/reasoning/group-presentation/group-presentation.test.js.map +1 -0
- package/dist/tests/reasoning/number-theory/number-theory.test.d.ts +2 -0
- package/dist/tests/reasoning/number-theory/number-theory.test.d.ts.map +1 -0
- package/dist/tests/reasoning/number-theory/number-theory.test.js +170 -0
- package/dist/tests/reasoning/number-theory/number-theory.test.js.map +1 -0
- package/dist/tests/reasoning/real-analysis/real-analysis.test.d.ts +2 -0
- package/dist/tests/reasoning/real-analysis/real-analysis.test.d.ts.map +1 -0
- package/dist/tests/reasoning/real-analysis/real-analysis.test.js +197 -0
- package/dist/tests/reasoning/real-analysis/real-analysis.test.js.map +1 -0
- package/dist/tests/reasoning/topology/topology.test.d.ts +2 -0
- package/dist/tests/reasoning/topology/topology.test.d.ts.map +1 -0
- package/dist/tests/reasoning/topology/topology.test.js +327 -0
- package/dist/tests/reasoning/topology/topology.test.js.map +1 -0
- package/dist/tests/tooling/exporters/coq-v2/coq-v2-exporter.test.d.ts +2 -0
- package/dist/tests/tooling/exporters/coq-v2/coq-v2-exporter.test.d.ts.map +1 -0
- package/dist/tests/tooling/exporters/coq-v2/coq-v2-exporter.test.js +411 -0
- package/dist/tests/tooling/exporters/coq-v2/coq-v2-exporter.test.js.map +1 -0
- package/dist/tests/tooling/exporters/lean4/lean4-exporter.test.d.ts +2 -0
- package/dist/tests/tooling/exporters/lean4/lean4-exporter.test.d.ts.map +1 -0
- package/dist/tests/tooling/exporters/lean4/lean4-exporter.test.js +473 -0
- package/dist/tests/tooling/exporters/lean4/lean4-exporter.test.js.map +1 -0
- package/dist/tests/tooling/lemma-library/lemma-library.test.d.ts +2 -0
- package/dist/tests/tooling/lemma-library/lemma-library.test.d.ts.map +1 -0
- package/dist/tests/tooling/lemma-library/lemma-library.test.js +197 -0
- package/dist/tests/tooling/lemma-library/lemma-library.test.js.map +1 -0
- package/dist/tests/tooling/provenance/ledger.test.d.ts +2 -0
- package/dist/tests/tooling/provenance/ledger.test.d.ts.map +1 -0
- package/dist/tests/tooling/provenance/ledger.test.js +545 -0
- package/dist/tests/tooling/provenance/ledger.test.js.map +1 -0
- package/dist/tooling/exporters/coq-v2/index.d.ts +68 -0
- package/dist/tooling/exporters/coq-v2/index.d.ts.map +1 -0
- package/dist/tooling/exporters/coq-v2/index.js +692 -0
- package/dist/tooling/exporters/coq-v2/index.js.map +1 -0
- package/dist/tooling/exporters/lean4/index.d.ts +47 -0
- package/dist/tooling/exporters/lean4/index.d.ts.map +1 -0
- package/dist/tooling/exporters/lean4/index.js +423 -0
- package/dist/tooling/exporters/lean4/index.js.map +1 -0
- package/dist/tooling/lemma-library/apply.d.ts +9 -0
- package/dist/tooling/lemma-library/apply.d.ts.map +1 -0
- package/dist/tooling/lemma-library/apply.js +94 -0
- package/dist/tooling/lemma-library/apply.js.map +1 -0
- package/dist/tooling/lemma-library/arithmetic.d.ts +3 -0
- package/dist/tooling/lemma-library/arithmetic.d.ts.map +1 -0
- package/dist/tooling/lemma-library/arithmetic.js +176 -0
- package/dist/tooling/lemma-library/arithmetic.js.map +1 -0
- package/dist/tooling/lemma-library/firstorder.d.ts +3 -0
- package/dist/tooling/lemma-library/firstorder.d.ts.map +1 -0
- package/dist/tooling/lemma-library/firstorder.js +136 -0
- package/dist/tooling/lemma-library/firstorder.js.map +1 -0
- package/dist/tooling/lemma-library/index.d.ts +13 -0
- package/dist/tooling/lemma-library/index.d.ts.map +1 -0
- package/dist/tooling/lemma-library/index.js +32 -0
- package/dist/tooling/lemma-library/index.js.map +1 -0
- package/dist/tooling/lemma-library/library.d.ts +34 -0
- package/dist/tooling/lemma-library/library.d.ts.map +1 -0
- package/dist/tooling/lemma-library/library.js +126 -0
- package/dist/tooling/lemma-library/library.js.map +1 -0
- package/dist/tooling/lemma-library/modal.d.ts +3 -0
- package/dist/tooling/lemma-library/modal.d.ts.map +1 -0
- package/dist/tooling/lemma-library/modal.js +138 -0
- package/dist/tooling/lemma-library/modal.js.map +1 -0
- package/dist/tooling/lemma-library/propositional.d.ts +3 -0
- package/dist/tooling/lemma-library/propositional.d.ts.map +1 -0
- package/dist/tooling/lemma-library/propositional.js +265 -0
- package/dist/tooling/lemma-library/propositional.js.map +1 -0
- package/dist/tooling/lemma-library/set-theory.d.ts +3 -0
- package/dist/tooling/lemma-library/set-theory.d.ts.map +1 -0
- package/dist/tooling/lemma-library/set-theory.js +134 -0
- package/dist/tooling/lemma-library/set-theory.js.map +1 -0
- package/dist/tooling/lemma-library/standard.d.ts +3 -0
- package/dist/tooling/lemma-library/standard.d.ts.map +1 -0
- package/dist/tooling/lemma-library/standard.js +27 -0
- package/dist/tooling/lemma-library/standard.js.map +1 -0
- package/dist/tooling/lemma-library/tfidf.d.ts +5 -0
- package/dist/tooling/lemma-library/tfidf.d.ts.map +1 -0
- package/dist/tooling/lemma-library/tfidf.js +100 -0
- package/dist/tooling/lemma-library/tfidf.js.map +1 -0
- package/dist/tooling/lemma-library/tokenize.d.ts +2 -0
- package/dist/tooling/lemma-library/tokenize.d.ts.map +1 -0
- package/dist/tooling/lemma-library/tokenize.js +74 -0
- package/dist/tooling/lemma-library/tokenize.js.map +1 -0
- package/dist/tooling/lemma-library/types.d.ts +53 -0
- package/dist/tooling/lemma-library/types.d.ts.map +1 -0
- package/dist/tooling/lemma-library/types.js +10 -0
- package/dist/tooling/lemma-library/types.js.map +1 -0
- package/dist/tooling/provenance/index.d.ts +3 -0
- package/dist/tooling/provenance/index.d.ts.map +1 -0
- package/dist/tooling/provenance/index.js +16 -0
- package/dist/tooling/provenance/index.js.map +1 -0
- package/dist/tooling/provenance/ledger.d.ts +89 -0
- package/dist/tooling/provenance/ledger.d.ts.map +1 -0
- package/dist/tooling/provenance/ledger.js +439 -0
- package/dist/tooling/provenance/ledger.js.map +1 -0
- package/dist/tooling/provenance/types.d.ts +70 -0
- package/dist/tooling/provenance/types.d.ts.map +1 -0
- package/dist/tooling/provenance/types.js +14 -0
- package/dist/tooling/provenance/types.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================
|
|
3
|
+
// Diofantinas lineales y fracciones continuas.
|
|
4
|
+
// ============================================================
|
|
5
|
+
// linearDiophantine — soluciona a·x + b·y = c sobre enteros.
|
|
6
|
+
// continuedFractionExpansion — coeficientes de la expansión simple
|
|
7
|
+
// de num/den (Euclides clásico).
|
|
8
|
+
// fromContinuedFraction — reconstruye num/den a partir de [a0;a1,...].
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.linearDiophantine = linearDiophantine;
|
|
11
|
+
exports.continuedFractionExpansion = continuedFractionExpansion;
|
|
12
|
+
exports.fromContinuedFraction = fromContinuedFraction;
|
|
13
|
+
const gcd_1 = require("./gcd");
|
|
14
|
+
function linearDiophantine(a, b, c) {
|
|
15
|
+
if (a === 0n && b === 0n) {
|
|
16
|
+
if (c === 0n)
|
|
17
|
+
return { x: 0n, y: 0n };
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
if (a === 0n) {
|
|
21
|
+
if (c % b !== 0n)
|
|
22
|
+
return null;
|
|
23
|
+
return { x: 0n, y: c / b };
|
|
24
|
+
}
|
|
25
|
+
if (b === 0n) {
|
|
26
|
+
if (c % a !== 0n)
|
|
27
|
+
return null;
|
|
28
|
+
return { x: c / a, y: 0n };
|
|
29
|
+
}
|
|
30
|
+
const g = (0, gcd_1.gcd)(a, b);
|
|
31
|
+
if (c % g !== 0n)
|
|
32
|
+
return null;
|
|
33
|
+
const { x, y } = (0, gcd_1.extendedGcd)(a, b);
|
|
34
|
+
const factor = c / g;
|
|
35
|
+
return { x: x * factor, y: y * factor };
|
|
36
|
+
}
|
|
37
|
+
// Expansión simple de num/den. Soporta numeradores negativos
|
|
38
|
+
// devolviendo el cociente "floor" en a0 (estándar matemático).
|
|
39
|
+
function continuedFractionExpansion(num, den, maxLen = 64) {
|
|
40
|
+
if (den === 0n) {
|
|
41
|
+
throw new RangeError('continuedFractionExpansion: denominador 0');
|
|
42
|
+
}
|
|
43
|
+
let p = num;
|
|
44
|
+
let q = den;
|
|
45
|
+
// Normalizamos q > 0 para que floor sea consistente.
|
|
46
|
+
if (q < 0n) {
|
|
47
|
+
p = -p;
|
|
48
|
+
q = -q;
|
|
49
|
+
}
|
|
50
|
+
const result = [];
|
|
51
|
+
for (let i = 0; i < maxLen; i++) {
|
|
52
|
+
// Floor division: dividend = q * a + r, 0 <= r < q.
|
|
53
|
+
let a = p / q;
|
|
54
|
+
let r = p % q;
|
|
55
|
+
if (r < 0n) {
|
|
56
|
+
a -= 1n;
|
|
57
|
+
r += q;
|
|
58
|
+
}
|
|
59
|
+
result.push(a);
|
|
60
|
+
if (r === 0n)
|
|
61
|
+
return result;
|
|
62
|
+
p = q;
|
|
63
|
+
q = r;
|
|
64
|
+
}
|
|
65
|
+
return result;
|
|
66
|
+
}
|
|
67
|
+
function fromContinuedFraction(coefs) {
|
|
68
|
+
if (coefs.length === 0) {
|
|
69
|
+
throw new RangeError('fromContinuedFraction: array vacío');
|
|
70
|
+
}
|
|
71
|
+
// Recurrencia clásica: h_n = a_n·h_{n-1} + h_{n-2}; k similar.
|
|
72
|
+
// h_{-1}=1, h_{-2}=0, k_{-1}=0, k_{-2}=1.
|
|
73
|
+
let hPrev = 1n;
|
|
74
|
+
let hPrev2 = 0n;
|
|
75
|
+
let kPrev = 0n;
|
|
76
|
+
let kPrev2 = 1n;
|
|
77
|
+
for (const a of coefs) {
|
|
78
|
+
const h = a * hPrev + hPrev2;
|
|
79
|
+
const k = a * kPrev + kPrev2;
|
|
80
|
+
hPrev2 = hPrev;
|
|
81
|
+
hPrev = h;
|
|
82
|
+
kPrev2 = kPrev;
|
|
83
|
+
kPrev = k;
|
|
84
|
+
}
|
|
85
|
+
return { num: hPrev, den: kPrev };
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=diophantine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diophantine.js","sourceRoot":"","sources":["../../../src/reasoning/number-theory/diophantine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { modPow } from './modular';
|
|
2
|
+
export declare function factorize(n: bigint): Array<{
|
|
3
|
+
prime: bigint;
|
|
4
|
+
exponent: number;
|
|
5
|
+
}>;
|
|
6
|
+
export declare function divisors(n: bigint): bigint[];
|
|
7
|
+
export declare function eulerPhi(n: bigint): bigint;
|
|
8
|
+
export declare function mobius(n: bigint): -1 | 0 | 1;
|
|
9
|
+
export declare const _internal: {
|
|
10
|
+
modPow: typeof modPow;
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=factorization.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factorization.d.ts","sourceRoot":"","sources":["../../../src/reasoning/number-theory/factorization.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAwBnC,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAsC/E;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAkB5C;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAU1C;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAU5C;AAID,eAAO,MAAM,SAAS;;CAAa,CAAC"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================
|
|
3
|
+
// Factorización entera y funciones aritméticas derivadas.
|
|
4
|
+
// ============================================================
|
|
5
|
+
// factorize — combina trial-division (hasta primos pequeños),
|
|
6
|
+
// Miller-Rabin y Pollard's rho con polinomio
|
|
7
|
+
// x^2 + c para factores grandes.
|
|
8
|
+
// divisors — todos los divisores positivos en orden creciente.
|
|
9
|
+
// eulerPhi — totient de Euler: φ(n) = n · ∏ (1 - 1/p).
|
|
10
|
+
// mobius — función de Möbius: 0 si hay primo al cuadrado,
|
|
11
|
+
// (-1)^k si n = p1·...·pk con todos distintos.
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports._internal = void 0;
|
|
14
|
+
exports.factorize = factorize;
|
|
15
|
+
exports.divisors = divisors;
|
|
16
|
+
exports.eulerPhi = eulerPhi;
|
|
17
|
+
exports.mobius = mobius;
|
|
18
|
+
const gcd_1 = require("./gcd");
|
|
19
|
+
const primality_1 = require("./primality");
|
|
20
|
+
const modular_1 = require("./modular");
|
|
21
|
+
const absBig = (n) => (n < 0n ? -n : n);
|
|
22
|
+
// Pollard's rho con polinomio f(x) = x^2 + c (mod n).
|
|
23
|
+
// Reinicia con c distinto si converge a un factor trivial.
|
|
24
|
+
function pollardRho(n) {
|
|
25
|
+
if (n % 2n === 0n)
|
|
26
|
+
return 2n;
|
|
27
|
+
for (let c = 1n;; c++) {
|
|
28
|
+
let x = 2n;
|
|
29
|
+
let y = 2n;
|
|
30
|
+
let d = 1n;
|
|
31
|
+
const f = (z) => (z * z + c) % n;
|
|
32
|
+
while (d === 1n) {
|
|
33
|
+
x = f(x);
|
|
34
|
+
y = f(f(y));
|
|
35
|
+
const diff = x > y ? x - y : y - x;
|
|
36
|
+
d = (0, gcd_1.gcd)(diff, n);
|
|
37
|
+
}
|
|
38
|
+
if (d !== n)
|
|
39
|
+
return d;
|
|
40
|
+
// Trivial cycle: reintentar con otro c.
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
function factorize(n) {
|
|
44
|
+
if (n <= 0n) {
|
|
45
|
+
throw new RangeError(`factorize: requiere n > 0, recibido ${n}`);
|
|
46
|
+
}
|
|
47
|
+
if (n === 1n)
|
|
48
|
+
return [];
|
|
49
|
+
const result = new Map();
|
|
50
|
+
const addFactor = (p, k = 1) => {
|
|
51
|
+
const prev = result.get(p) ?? 0;
|
|
52
|
+
result.set(p, prev + k);
|
|
53
|
+
};
|
|
54
|
+
let m = n;
|
|
55
|
+
// Trial division por primos pequeños (≤ 1000) cubre la mayoría
|
|
56
|
+
// de casos de tests y deja al rho los factores grandes.
|
|
57
|
+
for (let p = 2n; p < 1000n; p++) {
|
|
58
|
+
if (m === 1n)
|
|
59
|
+
break;
|
|
60
|
+
while (m % p === 0n) {
|
|
61
|
+
addFactor(p);
|
|
62
|
+
m /= p;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// Resto factorizable: stack-based (rho recursivo via iterativo).
|
|
66
|
+
const stack = [];
|
|
67
|
+
if (m > 1n)
|
|
68
|
+
stack.push(m);
|
|
69
|
+
while (stack.length > 0) {
|
|
70
|
+
const cur = stack.pop();
|
|
71
|
+
if (cur === undefined || cur === 1n)
|
|
72
|
+
continue;
|
|
73
|
+
if ((0, primality_1.isPrime)(cur)) {
|
|
74
|
+
addFactor(cur);
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
let f = pollardRho(cur);
|
|
78
|
+
while (f === cur)
|
|
79
|
+
f = pollardRho(cur);
|
|
80
|
+
stack.push(f);
|
|
81
|
+
stack.push(cur / f);
|
|
82
|
+
}
|
|
83
|
+
return Array.from(result.entries())
|
|
84
|
+
.sort((a, b) => (a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0))
|
|
85
|
+
.map(([prime, exponent]) => ({ prime, exponent }));
|
|
86
|
+
}
|
|
87
|
+
function divisors(n) {
|
|
88
|
+
const a = absBig(n);
|
|
89
|
+
if (a === 0n) {
|
|
90
|
+
throw new RangeError('divisors(0) no está definido');
|
|
91
|
+
}
|
|
92
|
+
if (a === 1n)
|
|
93
|
+
return [1n];
|
|
94
|
+
const factors = factorize(a);
|
|
95
|
+
let result = [1n];
|
|
96
|
+
for (const { prime, exponent } of factors) {
|
|
97
|
+
const next = [];
|
|
98
|
+
let pk = 1n;
|
|
99
|
+
for (let k = 0; k <= exponent; k++) {
|
|
100
|
+
for (const d of result)
|
|
101
|
+
next.push(d * pk);
|
|
102
|
+
pk *= prime;
|
|
103
|
+
}
|
|
104
|
+
result = next;
|
|
105
|
+
}
|
|
106
|
+
return result.sort((a, b) => (a < b ? -1 : a > b ? 1 : 0));
|
|
107
|
+
}
|
|
108
|
+
function eulerPhi(n) {
|
|
109
|
+
if (n <= 0n) {
|
|
110
|
+
throw new RangeError(`eulerPhi: requiere n > 0, recibido ${n}`);
|
|
111
|
+
}
|
|
112
|
+
if (n === 1n)
|
|
113
|
+
return 1n;
|
|
114
|
+
let result = n;
|
|
115
|
+
for (const { prime } of factorize(n)) {
|
|
116
|
+
result = (result / prime) * (prime - 1n);
|
|
117
|
+
}
|
|
118
|
+
return result;
|
|
119
|
+
}
|
|
120
|
+
function mobius(n) {
|
|
121
|
+
if (n <= 0n) {
|
|
122
|
+
throw new RangeError(`mobius: requiere n > 0, recibido ${n}`);
|
|
123
|
+
}
|
|
124
|
+
if (n === 1n)
|
|
125
|
+
return 1;
|
|
126
|
+
const factors = factorize(n);
|
|
127
|
+
for (const { exponent } of factors) {
|
|
128
|
+
if (exponent >= 2)
|
|
129
|
+
return 0;
|
|
130
|
+
}
|
|
131
|
+
return factors.length % 2 === 0 ? 1 : -1;
|
|
132
|
+
}
|
|
133
|
+
// Helper para tests de millerRabin con Mersenne grandes — no exportado.
|
|
134
|
+
// (kept here only as a comment-anchor for the team)
|
|
135
|
+
exports._internal = { modPow: modular_1.modPow };
|
|
136
|
+
//# sourceMappingURL=factorization.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factorization.js","sourceRoot":"","sources":["../../../src/reasoning/number-theory/factorization.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gcd.d.ts","sourceRoot":"","sources":["../../../src/reasoning/number-theory/gcd.ts"],"names":[],"mappings":"AAUA,wBAAgB,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAShD;AAED,wBAAgB,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAIhD;AAKD,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAiBvF"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================
|
|
3
|
+
// gcd, lcm y algoritmo extendido sobre bigint.
|
|
4
|
+
// ============================================================
|
|
5
|
+
// gcd(a,b) por Euclides binario-aritmético, siempre no-negativo.
|
|
6
|
+
// extendedGcd devuelve coeficientes Bézout (x,y) con a·x + b·y = gcd.
|
|
7
|
+
// Convención: para a=b=0 el gcd es 0 (consistente con álgebra
|
|
8
|
+
// conmutativa: el único divisor común es 0).
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.gcd = gcd;
|
|
11
|
+
exports.lcm = lcm;
|
|
12
|
+
exports.extendedGcd = extendedGcd;
|
|
13
|
+
const absBig = (n) => (n < 0n ? -n : n);
|
|
14
|
+
function gcd(a, b) {
|
|
15
|
+
let x = absBig(a);
|
|
16
|
+
let y = absBig(b);
|
|
17
|
+
while (y !== 0n) {
|
|
18
|
+
const r = x % y;
|
|
19
|
+
x = y;
|
|
20
|
+
y = r;
|
|
21
|
+
}
|
|
22
|
+
return x;
|
|
23
|
+
}
|
|
24
|
+
function lcm(a, b) {
|
|
25
|
+
if (a === 0n || b === 0n)
|
|
26
|
+
return 0n;
|
|
27
|
+
const g = gcd(a, b);
|
|
28
|
+
return absBig((a / g) * b);
|
|
29
|
+
}
|
|
30
|
+
// Extended Euclidean algorithm.
|
|
31
|
+
// Garantiza: a·x + b·y = gcd(a,b) (con signo original conservado).
|
|
32
|
+
// Si a o b son negativos, x/y se ajustan automáticamente.
|
|
33
|
+
function extendedGcd(a, b) {
|
|
34
|
+
// Trabajamos con valores absolutos y ajustamos signos al final.
|
|
35
|
+
const signA = a < 0n ? -1n : 1n;
|
|
36
|
+
const signB = b < 0n ? -1n : 1n;
|
|
37
|
+
let oldR = absBig(a);
|
|
38
|
+
let r = absBig(b);
|
|
39
|
+
let oldS = 1n;
|
|
40
|
+
let s = 0n;
|
|
41
|
+
let oldT = 0n;
|
|
42
|
+
let t = 1n;
|
|
43
|
+
while (r !== 0n) {
|
|
44
|
+
const q = oldR / r;
|
|
45
|
+
[oldR, r] = [r, oldR - q * r];
|
|
46
|
+
[oldS, s] = [s, oldS - q * s];
|
|
47
|
+
[oldT, t] = [t, oldT - q * t];
|
|
48
|
+
}
|
|
49
|
+
return { gcd: oldR, x: oldS * signA, y: oldT * signB };
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=gcd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gcd.js","sourceRoot":"","sources":["../../../src/reasoning/number-theory/gcd.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,+CAA+C;AAC/C,+DAA+D;AAC/D,iEAAiE;AACjE,sEAAsE;AACtE,8DAA8D;AAC9D,6CAA6C;;AAI7C,kBASC;AAED,kBAIC;AAKD,kCAiBC;AAvCD,MAAM,MAAM,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAExD,SAAgB,GAAG,CAAC,CAAS,EAAE,CAAS;IACtC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAClB,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAClB,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;QAChB,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChB,CAAC,GAAG,CAAC,CAAC;QACN,CAAC,GAAG,CAAC,CAAC;IACR,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAgB,GAAG,CAAC,CAAS,EAAE,CAAS;IACtC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;QAAE,OAAO,EAAE,CAAC;IACpC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACpB,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,CAAC;AAED,gCAAgC;AAChC,mEAAmE;AACnE,0DAA0D;AAC1D,SAAgB,WAAW,CAAC,CAAS,EAAE,CAAS;IAC9C,gEAAgE;IAChE,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAChC,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAChC,IAAI,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACrB,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAClB,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,IAAI,CAAC,GAAG,EAAE,CAAC;IACX,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,IAAI,CAAC,GAAG,EAAE,CAAC;IACX,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;QAChB,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;QACnB,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9B,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9B,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC;AACzD,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { gcd, lcm, extendedGcd } from './gcd';
|
|
2
|
+
export { modPow, modInverse, modSolve } from './modular';
|
|
3
|
+
export type { Congruence } from './crt';
|
|
4
|
+
export { crt } from './crt';
|
|
5
|
+
export { isPrime, millerRabin, nextPrime, previousPrime, primesBelow } from './primality';
|
|
6
|
+
export { factorize, divisors, eulerPhi, mobius } from './factorization';
|
|
7
|
+
export { linearDiophantine, continuedFractionExpansion, fromContinuedFraction, } from './diophantine';
|
|
8
|
+
export { legendreSymbol, jacobiSymbol } from './symbols';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/reasoning/number-theory/index.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACzD,YAAY,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1F,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,EACL,iBAAiB,EACjB,0BAA0B,EAC1B,qBAAqB,GACtB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================
|
|
3
|
+
// ST Number Theory — barrel público.
|
|
4
|
+
// ============================================================
|
|
5
|
+
// Primitivas:
|
|
6
|
+
// gcd / lcm / extendedGcd — Euclides + Bézout.
|
|
7
|
+
// modPow / modInverse / modSolve — aritmética modular.
|
|
8
|
+
// crt — Chinese Remainder generalizado.
|
|
9
|
+
// isPrime / millerRabin — primalidad determinístico-ish.
|
|
10
|
+
// nextPrime / previousPrime / primesBelow
|
|
11
|
+
// factorize / divisors / eulerPhi / mobius
|
|
12
|
+
// linearDiophantine — Bézout sobre ax+by=c.
|
|
13
|
+
// continuedFractionExpansion / fromContinuedFraction
|
|
14
|
+
// legendreSymbol / jacobiSymbol — residuos cuadráticos.
|
|
15
|
+
// ============================================================
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.jacobiSymbol = exports.legendreSymbol = exports.fromContinuedFraction = exports.continuedFractionExpansion = exports.linearDiophantine = exports.mobius = exports.eulerPhi = exports.divisors = exports.factorize = exports.primesBelow = exports.previousPrime = exports.nextPrime = exports.millerRabin = exports.isPrime = exports.crt = exports.modSolve = exports.modInverse = exports.modPow = exports.extendedGcd = exports.lcm = exports.gcd = void 0;
|
|
18
|
+
var gcd_1 = require("./gcd");
|
|
19
|
+
Object.defineProperty(exports, "gcd", { enumerable: true, get: function () { return gcd_1.gcd; } });
|
|
20
|
+
Object.defineProperty(exports, "lcm", { enumerable: true, get: function () { return gcd_1.lcm; } });
|
|
21
|
+
Object.defineProperty(exports, "extendedGcd", { enumerable: true, get: function () { return gcd_1.extendedGcd; } });
|
|
22
|
+
var modular_1 = require("./modular");
|
|
23
|
+
Object.defineProperty(exports, "modPow", { enumerable: true, get: function () { return modular_1.modPow; } });
|
|
24
|
+
Object.defineProperty(exports, "modInverse", { enumerable: true, get: function () { return modular_1.modInverse; } });
|
|
25
|
+
Object.defineProperty(exports, "modSolve", { enumerable: true, get: function () { return modular_1.modSolve; } });
|
|
26
|
+
var crt_1 = require("./crt");
|
|
27
|
+
Object.defineProperty(exports, "crt", { enumerable: true, get: function () { return crt_1.crt; } });
|
|
28
|
+
var primality_1 = require("./primality");
|
|
29
|
+
Object.defineProperty(exports, "isPrime", { enumerable: true, get: function () { return primality_1.isPrime; } });
|
|
30
|
+
Object.defineProperty(exports, "millerRabin", { enumerable: true, get: function () { return primality_1.millerRabin; } });
|
|
31
|
+
Object.defineProperty(exports, "nextPrime", { enumerable: true, get: function () { return primality_1.nextPrime; } });
|
|
32
|
+
Object.defineProperty(exports, "previousPrime", { enumerable: true, get: function () { return primality_1.previousPrime; } });
|
|
33
|
+
Object.defineProperty(exports, "primesBelow", { enumerable: true, get: function () { return primality_1.primesBelow; } });
|
|
34
|
+
var factorization_1 = require("./factorization");
|
|
35
|
+
Object.defineProperty(exports, "factorize", { enumerable: true, get: function () { return factorization_1.factorize; } });
|
|
36
|
+
Object.defineProperty(exports, "divisors", { enumerable: true, get: function () { return factorization_1.divisors; } });
|
|
37
|
+
Object.defineProperty(exports, "eulerPhi", { enumerable: true, get: function () { return factorization_1.eulerPhi; } });
|
|
38
|
+
Object.defineProperty(exports, "mobius", { enumerable: true, get: function () { return factorization_1.mobius; } });
|
|
39
|
+
var diophantine_1 = require("./diophantine");
|
|
40
|
+
Object.defineProperty(exports, "linearDiophantine", { enumerable: true, get: function () { return diophantine_1.linearDiophantine; } });
|
|
41
|
+
Object.defineProperty(exports, "continuedFractionExpansion", { enumerable: true, get: function () { return diophantine_1.continuedFractionExpansion; } });
|
|
42
|
+
Object.defineProperty(exports, "fromContinuedFraction", { enumerable: true, get: function () { return diophantine_1.fromContinuedFraction; } });
|
|
43
|
+
var symbols_1 = require("./symbols");
|
|
44
|
+
Object.defineProperty(exports, "legendreSymbol", { enumerable: true, get: function () { return symbols_1.legendreSymbol; } });
|
|
45
|
+
Object.defineProperty(exports, "jacobiSymbol", { enumerable: true, get: function () { return symbols_1.jacobiSymbol; } });
|
|
46
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/reasoning/number-theory/index.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,qCAAqC;AACrC,+DAA+D;AAC/D,cAAc;AACd,4DAA4D;AAC5D,6DAA6D;AAC7D,yEAAyE;AACzE,wEAAwE;AACxE,4CAA4C;AAC5C,6CAA6C;AAC7C,+DAA+D;AAC/D,uDAAuD;AACvD,+DAA+D;AAC/D,+DAA+D;;;AAE/D,6BAA8C;AAArC,0FAAA,GAAG,OAAA;AAAE,0FAAA,GAAG,OAAA;AAAE,kGAAA,WAAW,OAAA;AAC9B,qCAAyD;AAAhD,iGAAA,MAAM,OAAA;AAAE,qGAAA,UAAU,OAAA;AAAE,mGAAA,QAAQ,OAAA;AAErC,6BAA4B;AAAnB,0FAAA,GAAG,OAAA;AACZ,yCAA0F;AAAjF,oGAAA,OAAO,OAAA;AAAE,wGAAA,WAAW,OAAA;AAAE,sGAAA,SAAS,OAAA;AAAE,0GAAA,aAAa,OAAA;AAAE,wGAAA,WAAW,OAAA;AACpE,iDAAwE;AAA/D,0GAAA,SAAS,OAAA;AAAE,yGAAA,QAAQ,OAAA;AAAE,yGAAA,QAAQ,OAAA;AAAE,uGAAA,MAAM,OAAA;AAC9C,6CAIuB;AAHrB,gHAAA,iBAAiB,OAAA;AACjB,yHAAA,0BAA0B,OAAA;AAC1B,oHAAA,qBAAqB,OAAA;AAEvB,qCAAyD;AAAhD,yGAAA,cAAc,OAAA;AAAE,uGAAA,YAAY,OAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
declare function mod(a: bigint, m: bigint): bigint;
|
|
2
|
+
export declare function modPow(base: bigint, exp: bigint, m: bigint): bigint;
|
|
3
|
+
export declare function modInverse(a: bigint, m: bigint): bigint | null;
|
|
4
|
+
export declare function modSolve(a: bigint, b: bigint, m: bigint): bigint | null;
|
|
5
|
+
export { mod };
|
|
6
|
+
//# sourceMappingURL=modular.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modular.d.ts","sourceRoot":"","sources":["../../../src/reasoning/number-theory/modular.ts"],"names":[],"mappings":"AAUA,iBAAS,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAMzC;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAsBnE;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAO9D;AAID,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAcvE;AAGD,OAAO,EAAE,GAAG,EAAE,CAAC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================
|
|
3
|
+
// Aritmética modular sobre bigint.
|
|
4
|
+
// ============================================================
|
|
5
|
+
// modPow — exponenciación modular por squaring.
|
|
6
|
+
// modInverse — inverso multiplicativo usando Bézout (null si no existe).
|
|
7
|
+
// modSolve — resuelve a·x ≡ b (mod m) (null si no hay solución).
|
|
8
|
+
// Convención: el resultado siempre vive en [0, m) cuando m > 0.
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.modPow = modPow;
|
|
11
|
+
exports.modInverse = modInverse;
|
|
12
|
+
exports.modSolve = modSolve;
|
|
13
|
+
exports.mod = mod;
|
|
14
|
+
const gcd_1 = require("./gcd");
|
|
15
|
+
function mod(a, m) {
|
|
16
|
+
if (m <= 0n) {
|
|
17
|
+
throw new RangeError(`modulus must be positive, got ${m}`);
|
|
18
|
+
}
|
|
19
|
+
const r = a % m;
|
|
20
|
+
return r < 0n ? r + m : r;
|
|
21
|
+
}
|
|
22
|
+
function modPow(base, exp, m) {
|
|
23
|
+
if (m <= 0n) {
|
|
24
|
+
throw new RangeError(`modulus must be positive, got ${m}`);
|
|
25
|
+
}
|
|
26
|
+
if (m === 1n)
|
|
27
|
+
return 0n;
|
|
28
|
+
if (exp < 0n) {
|
|
29
|
+
// a^(-k) mod m = (a^-1)^k mod m (si a^-1 existe).
|
|
30
|
+
const inv = modInverse(base, m);
|
|
31
|
+
if (inv === null) {
|
|
32
|
+
throw new RangeError(`modPow: base ${base} no invertible mod ${m}`);
|
|
33
|
+
}
|
|
34
|
+
return modPow(inv, -exp, m);
|
|
35
|
+
}
|
|
36
|
+
let result = 1n;
|
|
37
|
+
let b = mod(base, m);
|
|
38
|
+
let e = exp;
|
|
39
|
+
while (e > 0n) {
|
|
40
|
+
if ((e & 1n) === 1n)
|
|
41
|
+
result = (result * b) % m;
|
|
42
|
+
e >>= 1n;
|
|
43
|
+
b = (b * b) % m;
|
|
44
|
+
}
|
|
45
|
+
return result;
|
|
46
|
+
}
|
|
47
|
+
function modInverse(a, m) {
|
|
48
|
+
if (m <= 0n) {
|
|
49
|
+
throw new RangeError(`modulus must be positive, got ${m}`);
|
|
50
|
+
}
|
|
51
|
+
const { gcd: g, x } = (0, gcd_1.extendedGcd)(mod(a, m), m);
|
|
52
|
+
if (g !== 1n)
|
|
53
|
+
return null;
|
|
54
|
+
return mod(x, m);
|
|
55
|
+
}
|
|
56
|
+
// Resuelve a·x ≡ b (mod m). Solución única (mod m/gcd) cuando existe.
|
|
57
|
+
// Devolvemos la solución mínima no-negativa.
|
|
58
|
+
function modSolve(a, b, m) {
|
|
59
|
+
if (m <= 0n) {
|
|
60
|
+
throw new RangeError(`modulus must be positive, got ${m}`);
|
|
61
|
+
}
|
|
62
|
+
const aR = mod(a, m);
|
|
63
|
+
const bR = mod(b, m);
|
|
64
|
+
const g = (0, gcd_1.gcd)(aR, m);
|
|
65
|
+
if (bR % g !== 0n)
|
|
66
|
+
return null;
|
|
67
|
+
const aR2 = aR / g;
|
|
68
|
+
const bR2 = bR / g;
|
|
69
|
+
const m2 = m / g;
|
|
70
|
+
const inv = modInverse(aR2, m2);
|
|
71
|
+
if (inv === null)
|
|
72
|
+
return null;
|
|
73
|
+
return mod(bR2 * inv, m2);
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=modular.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modular.js","sourceRoot":"","sources":["../../../src/reasoning/number-theory/modular.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare function millerRabin(n: bigint, witnesses?: bigint[]): boolean;
|
|
2
|
+
export declare function isPrime(n: bigint): boolean;
|
|
3
|
+
export declare function nextPrime(n: bigint): bigint;
|
|
4
|
+
export declare function previousPrime(n: bigint): bigint;
|
|
5
|
+
export declare function primesBelow(n: number): bigint[];
|
|
6
|
+
//# sourceMappingURL=primality.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"primality.d.ts","sourceRoot":"","sources":["../../../src/reasoning/number-theory/primality.ts"],"names":[],"mappings":"AA4CA,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,GAAE,MAAM,EAAsB,GAAG,OAAO,CAuBvF;AAED,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAO1C;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAO3C;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAa/C;AAGD,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAmB/C"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================
|
|
3
|
+
// Tests de primalidad.
|
|
4
|
+
// ============================================================
|
|
5
|
+
// isPrime — wrapper que decide entre trial-division y Miller-Rabin
|
|
6
|
+
// según el tamaño de n.
|
|
7
|
+
// millerRabin — test probabilístico, determinístico para los testigos
|
|
8
|
+
// estándar hasta 3.3·10^14 (con la lista de testigos
|
|
9
|
+
// [2,3,5,7,11,13,17,19,23,29,31,37]).
|
|
10
|
+
// nextPrime / previousPrime — siguiente/previo primo respecto a n.
|
|
11
|
+
// primesBelow — criba de Eratóstenes hasta n (n: number, exclusivo).
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.millerRabin = millerRabin;
|
|
14
|
+
exports.isPrime = isPrime;
|
|
15
|
+
exports.nextPrime = nextPrime;
|
|
16
|
+
exports.previousPrime = previousPrime;
|
|
17
|
+
exports.primesBelow = primesBelow;
|
|
18
|
+
const modular_1 = require("./modular");
|
|
19
|
+
const SMALL_PRIMES = [
|
|
20
|
+
2n,
|
|
21
|
+
3n,
|
|
22
|
+
5n,
|
|
23
|
+
7n,
|
|
24
|
+
11n,
|
|
25
|
+
13n,
|
|
26
|
+
17n,
|
|
27
|
+
19n,
|
|
28
|
+
23n,
|
|
29
|
+
29n,
|
|
30
|
+
31n,
|
|
31
|
+
37n,
|
|
32
|
+
41n,
|
|
33
|
+
43n,
|
|
34
|
+
47n,
|
|
35
|
+
53n,
|
|
36
|
+
59n,
|
|
37
|
+
61n,
|
|
38
|
+
67n,
|
|
39
|
+
71n,
|
|
40
|
+
73n,
|
|
41
|
+
79n,
|
|
42
|
+
83n,
|
|
43
|
+
89n,
|
|
44
|
+
97n,
|
|
45
|
+
];
|
|
46
|
+
// Testigos suficientes (determinísticos) para n < 3,317,044,064,679,887,385,961,981.
|
|
47
|
+
const DEFAULT_WITNESSES = [2n, 3n, 5n, 7n, 11n, 13n, 17n, 19n, 23n, 29n, 31n, 37n];
|
|
48
|
+
function millerRabin(n, witnesses = DEFAULT_WITNESSES) {
|
|
49
|
+
if (n < 2n)
|
|
50
|
+
return false;
|
|
51
|
+
if (n < 4n)
|
|
52
|
+
return true;
|
|
53
|
+
if ((n & 1n) === 0n)
|
|
54
|
+
return false;
|
|
55
|
+
// Escribir n-1 = 2^s · d con d impar.
|
|
56
|
+
let d = n - 1n;
|
|
57
|
+
let s = 0n;
|
|
58
|
+
while ((d & 1n) === 0n) {
|
|
59
|
+
d >>= 1n;
|
|
60
|
+
s += 1n;
|
|
61
|
+
}
|
|
62
|
+
witness: for (const a0 of witnesses) {
|
|
63
|
+
const a = a0 % n;
|
|
64
|
+
if (a === 0n)
|
|
65
|
+
continue;
|
|
66
|
+
let x = (0, modular_1.modPow)(a, d, n);
|
|
67
|
+
if (x === 1n || x === n - 1n)
|
|
68
|
+
continue;
|
|
69
|
+
for (let r = 1n; r < s; r++) {
|
|
70
|
+
x = (x * x) % n;
|
|
71
|
+
if (x === n - 1n)
|
|
72
|
+
continue witness;
|
|
73
|
+
}
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
function isPrime(n) {
|
|
79
|
+
if (n < 2n)
|
|
80
|
+
return false;
|
|
81
|
+
for (const p of SMALL_PRIMES) {
|
|
82
|
+
if (n === p)
|
|
83
|
+
return true;
|
|
84
|
+
if (n % p === 0n)
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
return millerRabin(n);
|
|
88
|
+
}
|
|
89
|
+
function nextPrime(n) {
|
|
90
|
+
if (n < 2n)
|
|
91
|
+
return 2n;
|
|
92
|
+
let c = n + 1n;
|
|
93
|
+
if (c === 2n)
|
|
94
|
+
return 2n;
|
|
95
|
+
if ((c & 1n) === 0n)
|
|
96
|
+
c += 1n;
|
|
97
|
+
while (!isPrime(c))
|
|
98
|
+
c += 2n;
|
|
99
|
+
return c;
|
|
100
|
+
}
|
|
101
|
+
function previousPrime(n) {
|
|
102
|
+
if (n <= 2n) {
|
|
103
|
+
throw new RangeError('previousPrime: no hay primo menor que 2');
|
|
104
|
+
}
|
|
105
|
+
if (n === 3n)
|
|
106
|
+
return 2n;
|
|
107
|
+
let c = n - 1n;
|
|
108
|
+
if (c === 2n)
|
|
109
|
+
return 2n;
|
|
110
|
+
if ((c & 1n) === 0n)
|
|
111
|
+
c -= 1n;
|
|
112
|
+
while (c >= 2n && !isPrime(c))
|
|
113
|
+
c -= 2n;
|
|
114
|
+
if (c < 2n) {
|
|
115
|
+
throw new RangeError(`previousPrime: no hay primo menor que ${n}`);
|
|
116
|
+
}
|
|
117
|
+
return c;
|
|
118
|
+
}
|
|
119
|
+
// Criba de Eratóstenes. n: number (acotamos a Number por la criba).
|
|
120
|
+
function primesBelow(n) {
|
|
121
|
+
if (!Number.isFinite(n) || n < 2)
|
|
122
|
+
return [];
|
|
123
|
+
const limit = Math.floor(n);
|
|
124
|
+
const sieve = new Uint8Array(limit);
|
|
125
|
+
// sieve[i] === 0 → i es primo candidato.
|
|
126
|
+
// Marcamos 0 y 1 como compuestos.
|
|
127
|
+
sieve[0] = 1;
|
|
128
|
+
if (limit > 1)
|
|
129
|
+
sieve[1] = 1;
|
|
130
|
+
const sqrt = Math.floor(Math.sqrt(limit - 1));
|
|
131
|
+
for (let i = 2; i <= sqrt; i++) {
|
|
132
|
+
if (sieve[i] === 0) {
|
|
133
|
+
for (let j = i * i; j < limit; j += i)
|
|
134
|
+
sieve[j] = 1;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
const out = [];
|
|
138
|
+
for (let i = 2; i < limit; i++) {
|
|
139
|
+
if (sieve[i] === 0)
|
|
140
|
+
out.push(BigInt(i));
|
|
141
|
+
}
|
|
142
|
+
return out;
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=primality.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"primality.js","sourceRoot":"","sources":["../../../src/reasoning/number-theory/primality.ts"],"names":[],"mappings":"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"}
|