def collatz_sequence(n):
sequence = [n]
while n != 1:
if n % 2 == 0:
n = n // 2
else:
n = 3 * n + 1
sequence.append(n)
return sequence
def convert_to_sti_using_6k_plus_4(sequence):
sti_steps = []
for n in sequence:
# Vérifie si n est de la forme 6k + 4 (valable uniquement pour les nombres pairs)
if n % 2 == 0 and (n - 4) % 6 == 0:
i = (n - 1) // 3
sti_steps.append(i)
# On s'arrête une fois qu'on a 8 termes dans la STI
if len(sti_steps) == 8:
break
return sti_steps
def mod_16_segment(sti_sequence):
mod_16_steps = [i % 16 for i in sti_sequence]
segment = '-->'.join(map(str, mod_16_steps))
return segment
# Fonction pour calculer x
def calculate_x(i, k, b):
return int((i - b) / (2 ** k))
# Exemple avec i = 2361235441021745907775 (ou un autre impair)
i = 2361235441021745907775
collatz_seq = collatz_sequence(i)
# Conversion des étapes de Collatz en STI via la méthode des n de forme 6k+4
sti_sequence = convert_to_sti_using_6k_plus_4(collatz_seq)
# On affiche le segment des 8 premières étapes de la STI sous forme i mod 16
segment = mod_16_segment(sti_sequence)
print(f"STI Sequence: {sti_sequence}")
print(f"Segment (i mod 16): {segment}")
# Demande à l'utilisateur de saisir k et b
k = int(input("Entrer la valeur de k : "))
b = int(input("Entrer la valeur de b : "))
# Calcule x
x = calculate_x(i, k, b)
print(f"La valeur de x est : {x}")
print(f"Votre impair secret est i = 2^{k} * {x} + ({b})")