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

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

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

Message 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
Dernière modification par Ollivier le jeu. 06/oct./2022 17:00, modifié 1 fois.
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

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

Message 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) ?
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

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

Message par Ollivier »

Ça aligne les colonnes.
Avatar de l’utilisateur
Mindphazer
Messages : 694
Inscription : mer. 24/août/2005 10:42

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

Message 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
Bureau : Win10 64bits
Maison : Macbook Pro M3 16" SSD 512 Go / Ram 24 Go - iPad Pro 32 Go (pour madame) - iPhone 15 Pro Max 256 Go
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

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

Message 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...
Avatar de l’utilisateur
Mindphazer
Messages : 694
Inscription : mer. 24/août/2005 10:42

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

Message 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...)
Bureau : Win10 64bits
Maison : Macbook Pro M3 16" SSD 512 Go / Ram 24 Go - iPad Pro 32 Go (pour madame) - iPhone 15 Pro Max 256 Go
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

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

Message 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).
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

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

Message 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...
Avatar de l’utilisateur
SPH
Messages : 4945
Inscription : mer. 09/nov./2005 9:53

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

Message 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

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
Mindphazer
Messages : 694
Inscription : mer. 24/août/2005 10:42

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

Message 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
Bureau : Win10 64bits
Maison : Macbook Pro M3 16" SSD 512 Go / Ram 24 Go - iPad Pro 32 Go (pour madame) - iPhone 15 Pro Max 256 Go
Avatar de l’utilisateur
Mindphazer
Messages : 694
Inscription : mer. 24/août/2005 10:42

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

Message 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:
Bureau : Win10 64bits
Maison : Macbook Pro M3 16" SSD 512 Go / Ram 24 Go - iPad Pro 32 Go (pour madame) - iPhone 15 Pro Max 256 Go
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

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

Message 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é
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

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

Message 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
Avatar de l’utilisateur
SPH
Messages : 4945
Inscription : mer. 09/nov./2005 9:53

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

Message par SPH »

Reste que l'équation est belle quand même. :P

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

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

Message 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 ?
Répondre