Initial data commit

This commit is contained in:
Ingy döt Net 2023-07-01 11:58:00 -04:00
parent 72d218235f
commit f23f22d71c
199087 changed files with 3378941 additions and 0 deletions

View file

@ -0,0 +1,77 @@
T PExp
BigInt prime
Int exp
F (prime, exp)
.prime = prime
.exp = exp
F isqrt(self)
V b = self
L
V a = b
b = (self I/ a + a) I/ 2
I b >= a
R a
F factor(BigInt n)
[PExp] pf
V nn = n
V b = 0
L ((nn % 2) == 0)
nn I/= 2
b++
I b > 0
pf [+]= PExp(BigInt(2), b)
V s = isqrt(nn)
V d = BigInt(3)
L nn > 1
I d > s
d = nn
V e = 0
L
V (div, rem) = divmod(nn, d)
I bit_length(rem) > 0
L.break
nn = div
e++
I e > 0
pf [+]= PExp(d, e)
s = isqrt(nn)
d += 2
R pf
F moBachShallit58(BigInt a, BigInt n; pf)
V n1 = n - 1
V mo = BigInt(1)
L(pe) pf
V y = n1 I/ pow(pe.prime, BigInt(pe.exp))
V o = 0
V x = pow(a, y, n)
L x > 1
x = pow(x, pe.prime, n)
o++
V o1 = pow(pe.prime, BigInt(o))
o1 I/= gcd(mo, o1)
mo *= o1
R mo
F moTest(a, n)
I bit_length(a) < 100
print(ord(a), end' )
E
print(ord([big]), end' )
print( mod n = moBachShallit58(a, n, factor(n - 1)))
moTest(37, 3343)
moTest(pow(BigInt(10), 100) + 1, 7919)
moTest(pow(BigInt(10), 1000) + 1, 15485863)
moTest(pow(BigInt(10), 10000) - 1, BigInt(22801763489))
moTest(1511678068, 7379191741)
moTest(BigInt(3047753288), BigInt(2257683301))