Add modulo theory

This commit is contained in:
Byron Lathi
2025-10-26 15:43:36 -07:00
parent 5e3b7be854
commit faef39c4d3

View File

@@ -0,0 +1,75 @@
import random
PRIME = 2**130-5
def modulo_theory_simple(loops: int):
prime = 97
for _ in range(loops):
value_a = random.randint(1,97)
value_b = random.randint(1,97)
value_a_high = value_a // 10
value_a_low = value_a % 10 # Ignore this modulo, in base 2 it is a mask
prod_high = value_a_high * value_b
prod_low = value_a_low * value_b
mod_high = (prod_high*10) % prime
mod_low = prod_low % prime
mod_sum = (mod_high + mod_low) % prime
mod_conventional = (value_a * value_b) % prime
if mod_sum != mod_conventional:
print(f"{value_a}")
print(f"{value_b}")
print(f"{mod_sum=}")
print(f"{mod_conventional=}")
def modulo_theory_full(loops: int):
for _ in range(loops):
value_a = random.randint(1,PRIME)
value_b = random.randint(1,2**128)
a_partials = [(value_a >> 26*i) & (2**26-1) for i in range(5)]
prods = [a_partial * value_b for a_partial in a_partials]
mods = [friendly_modulo(prod, 26*i) for i, prod in enumerate(prods)]
mod_sum = friendly_modulo(sum(mods), 0)
mod_conventional = (value_a * value_b) % PRIME
if mod_sum != mod_conventional:
print(f"{value_a}")
print(f"{value_b}")
print(f"{mod_sum=}")
print(f"{mod_conventional=}")
def friendly_modulo(val: int, shift_amount: int) -> int:
high_part = val >> (130-shift_amount)
low_part = (val << shift_amount) & (2**130-1)
high_part *= 5
val = high_part + low_part
high_part = val >> 130
low_part = val & (2**130-1)
high_part *= 5
val = high_part + low_part
if val >= PRIME:
val -= PRIME
return val
if __name__ == "__main__":
#modulo_theory_simple(10000000)
modulo_theory_full(100000)