Deutsch English Français Italiano |
<sgvgk6$7us$1@cabale.usenet-fr.net> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!3.eu.feeder.erje.net!feeder.erje.net!fdn.fr!usenet-fr.net!.POSTED!not-for-mail From: Olivier Miakinen <om+news@miakinen.net> Newsgroups: fr.sci.maths Subject: =?UTF-8?Q?Re:_Modulo_tout_retourn=c3=a9_dans_les_clefs?= Date: Sat, 4 Sep 2021 12:09:10 +0200 Organization: There's no cabale Lines: 93 Message-ID: <sgvgk6$7us$1@cabale.usenet-fr.net> References: <sgap79$vsa$2@shakotay.alphanet.ch> <sgbruv$2n00$1@cabale.usenet-fr.net> <sgd0df$sch$2@shakotay.alphanet.ch> <sgtnp9$2n5o$1@cabale.usenet-fr.net> <sguc4k$3dg$1@shakotay.alphanet.ch> <sgv423$2ia$1@cabale.usenet-fr.net> <sgvets$eto$4@shakotay.alphanet.ch> NNTP-Posting-Host: 220.12.205.77.rev.sfr.net Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Trace: cabale.usenet-fr.net 1630750150 8156 77.205.12.220 (4 Sep 2021 10:09:10 GMT) X-Complaints-To: abuse@usenet-fr.net NNTP-Posting-Date: Sat, 4 Sep 2021 10:09:10 +0000 (UTC) User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0 SeaMonkey/2.49.4 In-Reply-To: <sgvets$eto$4@shakotay.alphanet.ch> Bytes: 4691 Le 04/09/2021 11:40, Benoit a écrit : >>> >>> N’y a-t-il pas : >>> >>> — 3 007 : 97 x 31 ==> 10 x 7 x 3 = 210 erreurs >>> — 7 000 005 : 97 x 72 165 ==> 7 x 3 x 5 = 105 erreurs >>> - 50 000 008 : 97 x 515464 ==> 6 X 5 X 2 = 60 erreurs >> >> Oui. Bien vu, et bien calculé. Outre 100 007, les nombres 3 007, 7 000 005 >> et 50 000 008 sont les seuls pour lesquels le changement de deux chiffres >> *dans le même sens* est une erreur indétectable. Et tu as bien calculé le >> nombre de possibilités pour chaque. >> >> Mais il ne faut pas oublier que l'on peut aussi *augmenter* un chiffre tout >> en *diminuant* un autre chiffre. Cela veut dire qu'en plus de chercher les >> multiples de 97 de la forme (d1 × 10^n + d2) il faut aussi considérer ceux >> de la forme (d1 × 10^n - d2). > > Et pourquoi ne pourrait-on pas diminuer les deux ? Ou, plus simplement, > faire les quatre possibilités ++, +-, -+ ou --. On peut très bien le faire, ce qui te donnera exactement deux fois plus de résultats puisque à chaque nombre que l'on peut augmenter correspond le nombre que l'on peut diminuer. En choisissant le sens de modification d'un des deux chiffres et en laissant libre le sens de l'autre chiffre (donc ++ et +- mais pas -+ ni --) je compte les « paires de nombres indiscernables » plutôt que les « nombres faisant partie d'une paire ». > [...] > >> Et les résultats non détaillés (juste le total) pour tous les nombres à >> deux chiffres qui sont premiers avec 10 : >> ======================================== >> $ code_correcteur.py 10 99 >> […] >> Meilleur total : 2167 pour 93 >> ======================================== > > Là je n’ai franchement pas les outils adéquats. Quoique réalisable, mais > long à mettre en place. Mon programme python : ======================================================================== #!/usr/bin/env python3 import sys def calcule_pour(modulo, verbose): somme = 0 for n in range(2, 13): mul = 10 ** n # d1 est le premier chiffre, entre 1 et 9 for d1 in range (1, 10): nombre = d1 * mul + 9 resid = nombre % modulo if resid <= 18: nombre = nombre - resid # d2 est compris entre -9 et -1 ou entre 1 et 9 d2 = 9 - resid positions = 13 - n if verbose: print(f"{nombre} ←{positions}→ {d1:+d} {d2:+d}") # var1 et var2 sont les comptes de chiffres possibles # à la position de d1 et d2 var1 = 10 - d1 var2 = 10 - abs(d2) compte = positions * var1 * var2 if verbose: print(f" {positions}×{var1}×{var2} = {compte}") somme += compte print("Total pour", modulo, "=", somme) return somme if len(sys.argv) == 2: modulo = int(sys.argv[1]) calcule_pour(modulo, True) if len(sys.argv) == 3: min = -1 best = 0 first = int(sys.argv[1]) last = int(sys.argv[2]) for modulo in range(first,last+1): if modulo % 2 != 0 and modulo % 5 != 0: somme = calcule_pour(modulo, False) if min < 0 or somme < min: min = somme best = modulo print("Meilleur total :", min, "pour", best) ======================================================================== -- Olivier Miakinen