Mathématiques avec Python et Ruby/Systèmes congruentiels en Ruby
Rallye mathématique de la Réunion
[modifier | modifier le wikicode]Sujet 2005, Exercice 2
[modifier | modifier le wikicode]On demande combien d'élèves il y a au total.
On va filtrer les solutions avec les critères donnés par l'énoncé, l'un après l'autre.
Intervalle
[modifier | modifier le wikicode]les nombres à tester sont tous les nombres entre 2800 et 2900, il y en a donc 101:
solutions=(2800..2900).to_a
puts(solutions.size)
Par 2
[modifier | modifier le wikicode]On ne va finalement garder que les nombres qui, pris 2 par 2, laissent 1 (soit tels que le reste de la division par 2 donne 1; on rappelle que ce reste se note par le symbole pourcent).
solutions=solutions.select{|n| n%2==1}
puts(solutions.size)
Ah! Il n'en reste plus que 50 à tester!
Par 3
[modifier | modifier le wikicode]Parmi ces 50, on va garder uniquement ceux qui, pris 3 par 3 aussi, laissent 1:
solutions=solutions.select{|n| n%3==1}
puts(solutions.size)
De 50, on est passé à 17.
Par 4
[modifier | modifier le wikicode]Ensuite on garde ceux des 17 qui, divisés par 4, laissent 1:
solutions=solutions.select{|n| n%4==1}
puts(solutions.size)
Plus que 8...
Par 5
[modifier | modifier le wikicode]On continue l'épuration:
solutions=solutions.select{|n| n%5==1}
puts(solutions)
Plus que deux candidats possibles !
Par 6
[modifier | modifier le wikicode]solutions=solutions.select{|n| n%6==1}
puts(solutions)
Pas de changement, toujours deux candidats.
Par 7
[modifier | modifier le wikicode]Maintenant on veut garder les nombres divisibles par 7. Le reste euclidien devra donc être nul:
solutions=solutions.select{|n| n%7==0}
puts(solutions)
Et hop! On a le nombre d'élèves!
Sujet 2007, Exercice 3
[modifier | modifier le wikicode]Ce soir, veille de marché, il est perplexe.
• S’il met ses œufs dans des emballages de 6, il en reste 2.
• S’il utilise des emballages de 10, il en reste encore 2.
• Il me faudrait, dit-il, des emballages de 8 pour tout contenir exactement.
On demande combien il y a d'œufs en tout.
Même exercice que celui d'au-dessus:
Intervalle
[modifier | modifier le wikicode]solutions=(40..200).to_a
puts(solutions.size)
Par 6
[modifier | modifier le wikicode]solutions=solutions.select{|n| n%6==2}
puts(solutions.size)
Plus que 27 nombres à tester.
Par 10
[modifier | modifier le wikicode]solutions=solutions.select{|n| n%10==2}
puts(solutions)
Plus que 5 nombres à tester.
Par 8
[modifier | modifier le wikicode]On veut que le reste dans la division par 8 soit nul:
solutions=solutions.select{|n| n%8==0}
puts(solutions)
Un seul nombre a réussi le parcours du combattant jusqu'au bout: C'est la solution au problème.