Page 1 sur 2

Math, nombres premiers : théorème de Wilson

Publié : sam. 01/oct./2022 21:14
par Ollivier
Je copie ce court code ici aussi. Cet algo m'obsède. Il est d'une simplificité apparente à s'arracher les cheveux. Sa complexité réside dans la valeur du nombre dont l'échelle explose avec une précision telle qu'il stocke tous les nombres premiers que la factorielle va "couvrir".

Code : Tout sélectionner

Dim s.s(1)
s(0) = " = 0 donc c'est un premier"
fact + 1
Debug Chr($8000)
For n = 2 To 21
   Debug Rset(Str(fact), 24, " ") + "+1  % " + Str(n) + s(Bool((fact + 1) % n) )
   fact * n
Next

Re: Math, nombres premiers : théorème de Wilson

Publié : dim. 02/oct./2022 11:28
par Ar-S
J'avoue être bien loin de m'intéresser aux nombres 1ers mais ton code est rigolo.
Pourquoi afficher le Chr($8000) ?

Re: Math, nombres premiers : théorème de Wilson

Publié : lun. 03/oct./2022 13:48
par Ollivier
Ça aligne les colonnes.

Re: Math, nombres premiers : théorème de Wilson

Publié : lun. 03/oct./2022 14:28
par Mindphazer
A part afficher un caractère chinois (ou japonais, je ne suis pas expert), ça ne fait rien d'autre chez moi...

耀
2+1 % 2 = 0 donc c'est un premier
3+1 % 3 = 0 donc c'est un premier
7+1 % 4
25+1 % 5 = 0 donc c'est un premier
121+1 % 6
721+1 % 7 = 0 donc c'est un premier
5041+1 % 8
40321+1 % 9
362881+1 % 10
3628801+1 % 11 = 0 donc c'est un premier
39916801+1 % 12
479001601+1 % 13 = 0 donc c'est un premier
6227020801+1 % 14
87178291201+1 % 15
1307674368001+1 % 16
20922789888001+1 % 17 = 0 donc c'est un premier
355687428096001+1 % 18
6402373705728001+1 % 19 = 0 donc c'est un premier
121645100408832001+1 % 20
2432902008176640001+1 % 21

Re: Math, nombres premiers : théorème de Wilson

Publié : lun. 03/oct./2022 15:05
par Ollivier
Mindphazer a écrit : lun. 03/oct./2022 14:28 A part afficher un caractère chinois (ou japonais, je ne suis pas expert), ça ne fait rien d'autre chez moi...
C'est normal : tu n'es pas sur un ordi en carton avec "Chewing-Dose 10" dessus.
Mindphazer a écrit : lun. 03/oct./2022 14:28A part afficher un caractère chinois (ou japonais, je ne suis pas expert),[...]
J'ai déjà vu une chinoise et une japonaise s'engueuler : il vaut mieux dicerner, c'est très différent, je te l'assure, tellement opposé qu'à part sourire jaune, je ne pouvais plus rien faire...

Re: Math, nombres premiers : théorème de Wilson

Publié : lun. 03/oct./2022 17:02
par Mindphazer
Ollivier a écrit : lun. 03/oct./2022 15:05 C'est normal : tu n'es pas sur un ordi en carton avec "Chewing-Dose 10" dessus
Sisi
J'ai testé sur un ordi au boulot, c'est bel et bien un Win10
Cela dit, j'ai également testé sur mon Mac. Résultats identiques.
J'ai toujours ce caractère, disons, extreme-oriental (je n'oserai pas dire à un chinois qu'il ressemble à japonais, et inversement...)

Re: Math, nombres premiers : théorème de Wilson

Publié : lun. 03/oct./2022 22:59
par Ollivier

Code : Tout sélectionner

Debug "Bonjour"
Debug Chr($8000)
Debug "Bonjour"
Le caractère chinois active une police type "Courier" pour permettre de respecter les colonnes (les caractères ont la même largeur).
ArS a écrit :J'avoue être bien loin de m'intéresser aux nombres 1ers mais ton code est rigolo.
Ah, c'est sûr, il y a un mur. Tout est parfait jusqu'à 21. Après, c'est dead. Tu peux essayer avec des grands nombres (chaînes ou en binaire dur) : tu vas déceler quelques nombres premiers supplémentaires, et puis tu te reprends un mur (mémoire saturée).

Le nombre en maths se traduit par une récursivité en logique. Ils sont infinis en maths, mais finis en logique.

La fonction factorielle est tellement redondante que tu peux lui modifier des chiffres au hasard dedans, et la "réparer" (en théorie).

Re: Math, nombres premiers : théorème de Wilson

Publié : lun. 03/oct./2022 23:18
par Ollivier
Mindphazer a écrit : lun. 03/oct./2022 14:28 A part afficher un caractère chinois (ou japonais, je ne suis pas expert), ça ne fait rien d'autre chez moi...

耀
2+1 % 2 = 0 donc c'est un premier
3+1 % 3 = 0 donc c'est un premier
7+1 % 4
Et tu pouvais pas le dire plus tôt que je m'étais piné ?

Il y a un "+ 1" dans (fact + 1) que j'ai laissé en trop... C'est 1+1 %2 qui donne zéro, etc...

Re: Math, nombres premiers : théorème de Wilson

Publié : mar. 04/oct./2022 8:26
par SPH
Pour en revenir au thème, va t'en prouver que 127 est un nombre premier !!
Le chiffre à moduler est trop "immaniable"... 8O

Re: Math, nombres premiers : théorème de Wilson

Publié : mar. 04/oct./2022 8:26
par Mindphazer
Ollivier a écrit : lun. 03/oct./2022 22:59

Code : Tout sélectionner

Debug "Bonjour"
Debug Chr($8000)
Debug "Bonjour"
Le caractère chinois active une police type "Courier" pour permettre de respecter les colonnes (les caractères ont la même largeur).
Heuuuuuuu... Pas chez moi. Le premier bonjour et le second ont absolument la même police, qui n'est pas Courier :
Bonjour
耀
Bonjour

Re: Math, nombres premiers : théorème de Wilson

Publié : mar. 04/oct./2022 8:27
par Mindphazer
Ollivier a écrit : lun. 03/oct./2022 23:18 Et tu pouvais pas le dire plus tôt que je m'étais piné ?
Il y a un "+ 1" dans (fact + 1) que j'ai laissé en trop... C'est 1+1 %2 qui donne zéro, etc...
J'ai préféré te laisser te corriger :mrgreen:

Re: Math, nombres premiers : théorème de Wilson

Publié : jeu. 06/oct./2022 17:01
par Ollivier
Mindphazer a écrit : mar. 04/oct./2022 8:27
Ollivier a écrit : lun. 03/oct./2022 23:18 Et tu pouvais pas le dire plus tôt que je m'étais piné ?
Il y a un "+ 1" dans (fact + 1) que j'ai laissé en trop... C'est 1+1 %2 qui donne zéro, etc...
J'ai préféré te laisser te corriger :mrgreen:
Affichage corrigé

Re: Math, nombres premiers : théorème de Wilson

Publié : ven. 07/oct./2022 2:47
par Ollivier
SPH a écrit : mar. 04/oct./2022 8:26 Pour en revenir au thème, va t'en prouver que 127 est un nombre premier !!
Le chiffre à moduler est trop "immaniable"... 8O
C'est un mur : incalculable, par manque de temps à la main. Par informatique, c'est plus rapide, mais si on veut vérifier la primalité de tous les nombres, ça reste trop long aussi.

Je crois qu'il y a une astuce de calcul, mais là encore, ça reste plus gourmand en ressource CPU que le crible d'Eratosthène.

Code : Tout sélectionner

Procedure isPrime(p)
 Protected a = p - 1
 Protected i
 For i = (p - 2) to 2 step -1
  a * i
  a % p
 next
 a + 1
 ProcedureReturn Bool(a = p)
EndProcedure

Re: Math, nombres premiers : théorème de Wilson

Publié : ven. 07/oct./2022 14:26
par SPH
Reste que l'équation est belle quand même. :P

Re: Math, nombres premiers : théorème de Wilson

Publié : ven. 07/oct./2022 21:08
par Ollivier
Fais-moi une petite chrono sympa. Donne-moi des durées obtenues, que je vois ma défaite :

Code : Tout sélectionner

OpenConsole()
For i = 1 to 10
 n = pow(10, i) - 7
 t0 = elapsedMilliseconds()
 isPrime(n)
 t1 = elapsedMilliseconds()
 PrintN(str(i) + " chiffre(s) : " + chr(9) + str(t1 - t0) + " ms")
Next
Input()
Ça donne quoi ?