Nombres premiers - Coïncidence logique en base 10

Sujets variés concernant le développement en PureBasic
Ollivier
Messages : 4190
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Nombres premiers - Coïncidence logique en base 10

Message par Ollivier »

Pour faire suite au sujet "Pile et voisinage des registres" en section ASM, voici un petit test de comparaison entre liens de présence des nombres premiers dans des plages précises et équation logique.

Pour rappel, on peut situer les nombres premiers > 5 dans 4 classes de nombres caractérisés par leur dernier chiffre :
- ceux qui finissent par 1
- ceux... par 3
- ceux... par 7
- ceux .. par 9

Dans un dizaine quelconque >= 10, on a donc un quartet qui se forme en fonction de l'état premier ou non premier des 4 nombres finissant par 1, 3, 7 ou 9.

Exemple :
entre 10 et 20
on a 11, 13, 17 et 19.
Ils sont tous premiers donc on obtient le nombre 1111 en base 2, 15 en base 10 ou encore F en base 16.

On convient que l'ordre des bits suit le sens de la lecture de gauche à droite.

Exemple, entre 20 et 30, on a 23 et 29 qui sont premiers et 21 et 27 sont non premiers. Donc
21, (23), 27 et (29) ce qui fait 0101 base 2 donc le code 5 en base 10 (ou 16).

On décide de représenter ces codes par des points dans une surface de 16*16. Ceci en alternant, d'une dizaine à la suivante, x et y.

Exemple de 10 à 30, on a 2 dizaines successives qui donnent 2 codes : F et 5.

On va donc dessiner le point d'abscisse F (15) et d'ordonnée 5.

On observe une figure qui se dessine à gauche dans le code suivant. J'ai représenté l'équation logique équivalente à droite.

On constate une équation logique "plutôt" simple :

S = E2&E0 | E7&E5 | E6&E4&E3&E1

avec 8 entrées de 0 à 7
de 0 à 3 pour les abscisses
de 4 à 7 pour les ordonnées

Comme le carré de 16*16 n'est pas également réparti, ça offre 1 cause et un effet :
1) Vérifier si ce carré se complète (ça permet aussi de comprendre que cette facilité est, quelque part, une sorte de "piège" de recherche de primalité.
2) Obtenir des consignes spécifiques de compression de données avec chaque position inutilisées.

Aussi l'équation logique est, quelque part, très simple. Elle se passe d'ordinateur (pollution, esclavage), de système d'exploitation (débat du libre/breveté), de logiciel d'exécution et de beaucoup d'électricité pour le calcul. Cependant, je suis dégelasse car je vais quand même me passionner d'utiliser les SIMD avec PureBasic sur un ordi, vu son âge, l'impact négatif reste relatif.

Code : Tout sélectionner

  Procedure.i pn(n)
       Define Sq = Sqr(N)
       For i = 2 To Sq
              If (N % I) = 0
                     ProcedureReturn 0
              EndIf       
       Next
       ProcedureReturn 1
EndProcedure

Procedure.I DC(D) ; (D)ecade (C)ode
       L1 = D + 1
       L3 = D + 3
       L7 = D + 7
       L9 = D + 9
       ProcedureReturn PN(L1) << 3 + PN(L3) << 2 + PN(L7) << 1 + PN(L9)
EndProcedure

Structure PointP
       X.I
       Y.I
EndStructure

Procedure.I PC(*R.PointP, V) ; (P)oint (C)ode
       Define *R.PointP
       *R\X = DC(V)
       *R\Y = DC(V + 10)
EndProcedure

Procedure Surface16x16()
       Define Win = OpenWindow(#PB_Any, 0, 0, 512, 256, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
       Define *P.PointP = AllocateMemory(SizeOf(PointP) )
       Define N = 10
       Define G = 255
       StickyWindow(Win, 1)
       If StartDrawing(WindowOutput(Win) )
              Box(0, 0, 512, 256, RGB(0, 0, 0) )
       EndIf
       StopDrawing()
       Repeat
              If StartDrawing(WindowOutput(Win) )
                     If 0
                     Else
                            PC(*P, N)
                            x = *P\X * 16
                            y = *P\Y * 16
                            Box(x, y, 16, 16, RGB(g, g, g) )
                     EndIf
                     If 1
                            Q = 0
                            For Y = 0 To 15
                                   For X = 0 To 15
                                          E = Q ! $FF
                                          E0 = E >> 0 & 1
                                          E1 = E >> 1 & 1
                                          E2 = E >> 2 & 1
                                          E3 = E >> 3 & 1
                                          E4 = E >> 4 & 1
                                          E5 = E >> 5 & 1
                                          E6 = E >> 6 & 1
                                          E7 = E >> 7 & 1
                                          S = (E2 & E0) | (E7 & E5) | (E6 & E4 & E3 & E1)
                                          If Not S
                                                 C = RGB(0, 0, 0)
                                          Else
                                                 C = RGB(255, 255, 255)
                                          EndIf
                                          Box(256 + X << 4 + 2, Y << 4 + 2, 12, 12, C)
                                          Q + 1
                                   Next
                            Next
                     EndIf
              EndIf
              StopDrawing()
              Delay(2)
              Ev = WindowEvent()
              N + 20
       Until Ev = #PB_Event_CloseWindow
EndProcedure

Surface16x16()
Avatar de l’utilisateur
SPH
Messages : 4722
Inscription : mer. 09/nov./2005 9:53

Re: Nombres premiers - Coïncidence logique en base 10

Message par SPH »

Erreur de syntaxe sur la premiere ligne (5.72x64)
http://HexaScrabble.com/
!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.00 - 64 bits
Ollivier
Messages : 4190
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Nombres premiers - Coïncidence logique en base 10

Message par Ollivier »

Salut SPH,

j'espère que ça va. À vrai dire Samsung s'en fout de laisser une erreur HTML dans mes codes. Pour eux, tant que ça marche sur "fesse-bouc", ils ont un chiffre d'affaire et ça leur permet de subvenir à leurs besoins.

La petite erreur de syntaxe du glandu, créée par les incompatibilités de presse-papier, etc, etc... et blabla... Ce n'est pas leur problème.

Donc je vais regarder si je localise quelquechose. Si je ne localise rien, nul n'est irremplaçable. En tout cas, merci d'avoir testé et informé, même si ça ne t'intéresse pas.

...

Donc après vérification de cette page, ligne 239, colonne 2890, j'ai le BOM du presse-papier qui n'est pas supporté par le forum donc il est joyeusement copié en ligne 1.

Si un modo pouvait retirer les 3 caractères anarchiques grâce à la localisation en gras, ça se serait sympatique.
Avatar de l’utilisateur
SPH
Messages : 4722
Inscription : mer. 09/nov./2005 9:53

Re: Nombres premiers - Coïncidence logique en base 10

Message par SPH »

Ollivier a écrit :Salut SPH,
... même si ça ne t'intéresse pas.
Tu te trompe : tout ce qui touche les nombres premiers m'interesse :!:
J'ai une quete : factoriser les grands nombres :arrow: :idea:

PS : pkoi faire appel a un modo pour corriger le code alors que tu peux le faire ???? 8O
http://HexaScrabble.com/
!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.00 - 64 bits
Ollivier
Messages : 4190
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Nombres premiers - Coïncidence logique en base 10

Message par Ollivier »

Non ! Je ne peux pas corriger ! Je veux bien être con, mais avec des limitations de vitesse ! Il me semble que Falsam se moquait déjà de moi à ce sujet il y a 3 ans. J'aurai déjà trouvé quand même : en 3 ans !

En fait sur Smartphone, tu as un standard, avec des absences lourdes de réglage. C'est évident et UFC Que choisir ramasse ses jambes avec des sujets périmés de plusieurs années, bien que les sentences judiciaires cognent assez fort.

Et les fabricants de Smartphone ça les faire rigoler à bloc, pour une poignée de cravates en France d'ailleurs : les délires se suivent mais ne se ressemblent pas...


En attendant, en tout début de code, il te suffit de mettre un petit coup de Backspace de bourrin sur le "P" de Procedure. Genre tu relâches le Backspace quand tu es en train de grignoter les astérisques. Puis tu retapes le "P" de Procedure.


Les nombres premiers, ça ne me passionne pas beaucoup. En fait, ça me passionnait il y a 25/30 ans, étant gamin. Et l'électronique est beaucoup plus intéressante et moins énergivore pour ça. Donc là, c'est juste un visu pour expliquer qu'on peut économiser des tests avec une certaine simplicité.


Pour les grands nombres, je laisse tomber : ce n'est pas utile pour moi... Avec 64 bits et les nombres premiers, tu as déjà un immense univers avec les calculs padiques et l'intelligence artificielle. C'est pour ça que je pensais que ça ne t'intéressait pas
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Nombres premiers - Coïncidence logique en base 10

Message par Ar-S »

Corrigé
~~~~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 : 4190
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Nombres premiers - Coïncidence logique en base 10

Message par Ollivier »

Merci ArS : la localisation Ligne+Colonne ça t'a aidé pour retrouver les mauvais caractères ? Ou bien il t'a fallu chercher tout seul ?
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Nombres premiers - Coïncidence logique en base 10

Message par Ar-S »

J'ai viré les 2 1ere ligne et réécrit procedure... :D
~~~~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
Répondre