From 8b83c5cae3862b128ab1f004fbaa042f32a549d8 Mon Sep 17 00:00:00 2001 From: robin Date: Tue, 26 Aug 2025 07:56:29 +0100 Subject: [PATCH] looking for patterns in primes as co_p_factor numbers --- primes_patterns.py | 76 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 primes_patterns.py diff --git a/primes_patterns.py b/primes_patterns.py new file mode 100644 index 0000000..7d07c6b --- /dev/null +++ b/primes_patterns.py @@ -0,0 +1,76 @@ +import math + +def primes_up_to(n: int): + """Generate all primes ≤ n using sieve of Eratosthenes.""" + if n < 2: + return [] + sieve = [True] * (n + 1) + sieve[0] = sieve[1] = False + for p in range(2, int(math.isqrt(n)) + 1): + if sieve[p]: + step = p + start = p * p + sieve[start:n + 1:step] = [False] * ((n - start) // step + 1) + return [i for i, is_p in enumerate(sieve) if is_p] + +def factor_exponents(n: int): + """Return dict {prime: exponent} for n (n ≥ 1).""" + exps = {} + if n <= 1: + return exps + limit = math.isqrt(n) + for p in primes_up_to(limit): + if p * p > n: + break + while n % p == 0: + exps[p] = exps.get(p, 0) + 1 + n //= p + if n > 1: # leftover prime + exps[n] = exps.get(n, 0) + 1 + return exps + +def exponents_in_prime_order(n: int, min_len=7): + """ + Produce exponents in order [2, 3, 5, 7, 11, 13, ...], + padded with zeros to length >= min_len. + """ + if n == 1: + return [0] * min_len + + exps = factor_exponents(n) + + # generate primes in ascending order until we cover all factors + primes_needed = sorted(exps.keys()) + max_prime = max(primes_needed) if primes_needed else 2 + primes_list = primes_up_to(max_prime) + + out = [exps.get(p, 0) for p in primes_list] + + # pad with zeros + while len(out) < min_len: + out.append(0) + + return out + +def format_exponents(exps): + """Format as comma-separated list with zero-padded width=3.""" + return ",".join(f"{e:03d}" for e in exps) + +def main(): + for s in range(1,100): + #s = input("Enter a positive integer (1..10000000): ").strip() + try: + n = int(s) + except ValueError: + print("Error: please enter an integer.") + return + if n < 1 or n > 10_000_000: + print("Error: number must be between 1 and 10,000,000.") + return + + exps = exponents_in_prime_order(n, min_len=7) + print(s, ': ',format_exponents(exps)) + +if __name__ == "__main__": + main() +