################################################################################ # # Run a Seed and print: N * 2^K = Seed * 3^L + D # Ones N / Seed = 3^L / 2^K + A # # Seed Starting value # N First value under Seed # L Run length; number of odd transitions (3*n + 1) / 2 # K ceiling( L ); number of even transitions n / 2 # D For i = 1 to L; Sum 3^(L-i) * 2^Ki-1 # A N / Seed - 3^L / 2^K # Ones Number of leading one bits in 3^L #............................................................................... import sys if len(sys.argv) == 1: print("ERROR: Expected an odd integer argument.") elif len(sys.argv) > 2: print("ERROR: Too many script arguments.") else: if sys.argv[1][0] == '#': Seed = int((sys.argv[1])[1:], 16) else: Seed = int(sys.argv[1]) if not isinstance(Seed, int): print(type( Seed ), "ERROR: Expected an odd integer argument.") else: D = A = L = E = K = 0 N = Seed while N >= Seed: # print( L, E, K, N, D ) N = 3*N + 1 L += 1 E = 0 D = 3*D + (1 << K) while N & 1 == 0: N >>= 1 K += 1 E += 1 print( " ", N, " * 2^", K, " = ", Seed, " * 3^", L, " + ", D, sep='' ) A = 1 << (K - 2) Ones = 1 while (3**L) & A: Ones += 1 A >>= 1 A = (N / Seed) - (3**L / 2**K) print( " Ones =", Ones, " N / Seed =", N/Seed, "= 3^L / 2^K +", A ) # #.............................. length.seed.py ...............................