Suite de Syracuse

De Kono Phil Ceci est la tagline
Aller à la navigation Aller à la recherche

La suite de Syracuse est une suite d'entiers naturels définie de la manière suivante : on part d'un nombre entier strictement positif ; s’il est pair, on le divise par 2 ; s’il est impair, on le multiplie par 3 et l'on ajoute 1. En répétant l’opération, on obtient une suite d'entiers strictement positifs dont chacun ne dépend que de son prédécesseur. (Source : wikipedia)

Calcul de la suite

PowerShell

Reprise du script du site de Chevalier-Info, https://www.chevalier-info.com/post/powershell-calculer-la-conjecture-de-syracuse

# Fonction pour le calcul de suites de Syracuse
Function Calcul ($nombre) {
	if ($nombre % 2 -eq 0){
	    $resultat = $nombre / 2
	    [void]$tableau.Add($resultat)
    	}
    Else{	
		$resultat = $nombre * 3 + 1
	    [void]$tableau.Add($resultat)
	    } 
	if ($resultat -ne 1){
		Calcul $resultat
		}
    Else{
        write-host "Le nombre 1 est atteint !"
        write-host "Liste des étapes : "
        $tableau
		$dureeduvol = $tableau.Count
		write-host "Durée du vol :" $dureeduvol
		$max = $tableau | measure -Maximum
		write-host "Altitude maximum :" $max.maximum
		write-host "Fin"
		}
}

# Partie principale
Clear-Host
$nombres = 1..12
foreach ($nombre in $nombres) {
    $tableau = New-Object System.Collections.ArrayList
    write-host -f green "Début du calcul avec :" $nombre
    Calcul $nombre
}

Python

Reprise du script du site de Bibmath.net

#!/usr/bin/env python
# -*- coding: utf-8 -*-

print ('     *** Vol de la suite de Syracuse ***\n')

hauteurVol, tpsVol, tpsVolAlt, altMax, sortie = 0, 0, 0, 0, 0

# Saisie du nombre de départ
while not sortie:
    try:
        depart = abs(int(input('Entrez la valeur de départ : ')))
        sortie = 1
    except ValueError:
        print("Ce n'est pas un nombre, veuillez recommencer s'il vous plaît !")
        print()

# Calculs       
valeur = depart
while hauteurVol != 1 :
    if valeur % 2 == 0:
        valeur = valeur / 2
    else:
        valeur = valeur * 3 + 1      

    if ((valeur <= depart) and (tpsVol > 0) and (tpsVolAlt == 0)):
        tpsVolAlt = tpsVol

    if (altMax < valeur):
        altMax = valeur

    hauteurVol = valeur
    tpsVol += 1

# Affichage des résultats
lg = max(len(str(tpsVol)), len(str(tpsVolAlt)), len(str(altMax)))
print()
print ("Temps de vol             : ", str(tpsVol).rjust(lg))
print ("Temps de vol en altitude : ", str(tpsVolAlt).rjust(lg))
print ("Altitude maximale        : ", str(altMax).rjust(lg))

Voir aussi

  •