Aller au contenu principal

Factorielle inversée

Énoncé

L'important pour pouvoir faire cet exercice est de savoir ce qu'est une factorielle.

Une factorielle se note avec un point d'exclamation, par exemple 5!. C'est une valeur numérique qui est égale à la multiplication de tous les termes jusqu'au chiffre 1.

Pour notre exemple, 5! = 120 car c'est égal à 5x4x3x2x1 = 120.

Simple, n'est-ce pas ? Peut-être un peu trop pour nous alors on va faire l'inverse !

Pour cela on va écrire une fonction qui va prendre en entrée un nombre, 120 pour garder le même exemple, et qui indiquera si un factoriel existe pour ce nombre, ou pas ; ici ce sera 5!, la sortie pour notre exemple.

Mais comment allez faire ? C'est assez simple il suffit de prendre le nombre et de le diviser jusqu'à obtenir 1.

120 -> 120/2 -> 60/3 -> 20/4 -> 5/5 -> 1 => 5!

Entrée

En entrée vous allez recevoir des entiers. Exemple :

120
150

Sortie

En sortie, on veut obtenir la factorielle d'origine si elle existe sinon « Aucune factorielle possible ». Exemple :

120 = 5!
150 Aucune factorielle possible

Données à tester

3628800
479001600
6
18

Résultat attendu

3628800 = 10!
479001600 = 12!
6 = 3!
18 Aucune factorielle possible

Travaux réalisés

Mon code

#lang racket

(define (invfact x i)
(define y (/ x i))
(cond
[(= y 1) x]
[(> y 1) (invfact y (+ i 1))]
[(< y 1) (error "Aucune factorielle possible")]))

(define (display_invfact n)
(printf "~a = ~a!\n" n (invfact n 2)))

(display_invfact 120)
(display_invfact 3628800)
(display_invfact 479001600)
(display_invfact 6)
(display_invfact 18)