Forum de mathématiques - Bibm@th.net
Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Répondre
Résumé de la discussion (messages les plus récents en premier)
- LEG
- 26-11-2020 19:09:49
Bonsoir à tous
@Yoshi je pense que pour l'optimiser il faut déjà éliminer les multiples de 2,3,et 5 travailler avec les entiers des 8 famille 30k + i , avec appartenant à (1,7,11,13,17,19,23,29) ce qui supprime 73,666....% des entiers naturels
Ce qui donne:
[ 1 , 7 , 11 , 13 , 17 , 19 , 23 , 29 ]
[ 31 ,37, 41 , 43 , 47 , 49 , 53 , 59 ]
etc...
@Omhaf.
peux tu donc essayer avec ta programmation... voire le temps que cela donne ; Sinon en python par Yoshi...
car regarde ce que donne mon algorithme écrit par Yoshi en Python :
pout N 1000 020; avec la Fam 3k + 7
===== RESTART: E:\Documents\Conjecture de Goldbach\Crible_ Era_gty_mod30.py ====
Donnez N: 1000020
Nombre premiers criblés famille 7 : 9812 ----- 0.0
--- Temps total: 0.01 sec ---
Donc tu vois pour les 8 familles cela donne 0,01 seconde * 8 = 0,08 secondes ....
Donnez N: 1000020
Nombre premiers criblés famille 1 : 9807 ----- 0.0
--- Temps total: 0.01 sec ---
>>>
Donnez N: 1000020
Nombre premiers criblés famille 11 : 9810 ----- 0.0
--- Temps total: 0.01 sec ---
Donnez N: 1000020
Nombre premiers criblés famille 13 : 9826 ----- 0.01
--- Temps total: 0.01 sec ---
passons à n = 100 000 020
===== RESTART: E:\Documents\Conjecture de Goldbach\Crible_ Era_gty_mod30.py ====
Donnez N: 100000020
Nombre premiers criblés famille 7 : 720270 ----- 0.4
--- Temps total: 0.4 sec ---
soit pour les 8 familles : 3,2 secondes... en Python .
De plus tu va très vite saturer ta mémoire si tu dois écrire tous les nombres pour les tester au lieu de sauter par pas de P ("un nombres premiers, inferieur à racine de N") à partir de l'index du produit etc...
C'est peut être originale comme le dit Yoshi....(d'utiliser modulo 12) mais cela n'apportera rien de nouveau dans le criblage des nombres premiers.
- yoshi
- 26-11-2020 15:44:12
Bonjour,
Tu peux tout aussi bien te lancer dans Python aussi.
Le langage est libre et gratuit, il dispose d'une quantité assez phénoménale de librairies (programmes additionnels si u préfères) tierces qui en les installant avec le Python de base (à la base déjà bien large d'ailleurs), tu disposes de tas de fonctions supplémentaires...
J'ai une machine 64 bits et 16 Go de RAM, ce qui n'empêcherait pas mon script dxe fonctionner tel quel sur une machine 32 bits avec 8 Go de RAM...
L'avantage de Python est qu'il est clair à la lecture...
L'inconvénient, c'est que, langage interprété, il est sensiblement plus lent que C ou C++ par exemple...
@+
- Omhaf
- 26-11-2020 13:46:16
Re
Merci yoshi oui il fallait prendre en considération les avantages que Python offre car Windev n'est qu'un AGL (générateur d'applications de gestion et administratives)
en plus avec une machine 64 bits et une configuration optimale de la RAM les résultats seront meilleures
Pour la divisibilité par 12, oui il faut déclarer un seuil à partir duquel l'assertion est vraie (à partir de 5 et 7 49-25= 24 = 2*12)
Enfin permets moi de te remercier pour tes sympathiques interventions
- yoshi
- 26-11-2020 13:44:48
Re,
La différence entre 2 carrés de nombres premiers différents > 3 est donc toujours un multiple de 12
Si tu entends que les deux premiers sont tous deux >3, alors mes contre-exemples ne marchent plus...
Différents est inutile : 0 est un multiple de 12 (et de n'importe quoi d'autre). Stricto sensu, même en ne le précisant pas, la propriété est vraie pour une différence nulle.
Préciser "différents" laisse entendre que sinon, ce ne serait pas vrai...
Dont acte, j'ai écrit trop vite : je ne suis pas infaillible, moi. Surtout quand je fais plusieurs choses à la fois.
Et puis, avec l'âge, on devient sénile, c'est bien connu...
@+
- yoshi
- 26-11-2020 13:04:17
Re,
la différence entre les carrés de 2 nombres premiers divisée par 12 donne toujours un entier
Non, pas toujours...
Contre exemples :
$5^2-3^2=25-9=16$ et $16/12$ n'est pas entier...
$7^2-3^2=49-9=40$ et $40/12$ n'est pas entier...
Désolé, ami Omhaf... Console-toi, 48PierrelePetit a aussi énoncé une proposition fausse...
J'ai retravaillé ton Algorithme, je l'ai élagué de choses encombrantes (et qui ne servaient qu'à le ralentir), voilà ce que j'en ai fait en utilisant la "fonction" préexistante en Python : is_integer().
Pourquoi ?
Parce que si je demande à Python quel est le type de sqrt(4) il me répond float donc pas entier, parce que le résultat est 2.0
Cette "fonction" contourne ce problème et donne la bonne réponse.
Et donc, je n'ai plus besoin de tester la partie décimale pour savoir si le résultat est entier ou non.
J'ai inclus un chronomètre qui m'a permis de voir que j'ai divisé le temps de calcul par 3,4.
from time import time
Primes=[2]
debut=time()
for MonNombre in range(1,1000001,2):
Result=1
if not sqrt(MonNombre).is_integer():
Xetendue=int(sqrt(MonNombre))+1
for compteur in range(3,Xetendue,2):
if MonNombre%compteur==0:
Result=0
if Result:
Primes.append(MonNombre)
print(time()-debut, "s")
print(Primes)
print(len(Primes))
Recherche des premiers entre 1 et 1000000 : 32 s pour 78498 nombres trouvés...
14,5 s pour les 50000 premiers trouvés...
@+
- Omhaf
- 26-11-2020 12:57:37
Merci pour ton indulgence 48PierrelePetit
- Omhaf
- 26-11-2020 12:45:07
Re bonjour
Testé avec chrono
50000 nombres premiers (dernier =611953) en 1mn 33 s 92/10
- Omhaf
- 26-11-2020 12:13:19
Bonjour yoshi
Pour répondre à ta question yoshi lis bien ce qui suit stp
Je déclare que la différence entre les carrés de 2 nombres premiers divisée par 12 donne toujours un entier
si cette déclaration s'avère vraie et est inédite je te prie de la publier en mon nom et merci
- Omhaf
- 26-11-2020 11:56:59
Re Bonjour
Voici un exemple expliquant l'utilité de la division par 12
admettons que le compteur a passé 19 et retenu son carre cad AncienCarre=361
la boucle sautera à 21
Carre =21² = 441
Différence=441-361=80
80/12 n'est pas entier on saute au suivant en l'occurrence 23
23²=529
Différence = 529-361 =168
Oui 168/12 = un entier cad 14
on retient 23 pour les verifs ultérieures
- Omhaf
- 26-11-2020 11:44:57
Bonjour
élimine la partie inutile pour voir si ça marche c'est simple non ?
La division par 12 filtre beaucoup de nombres et soulage la vérification ultérieure
Comparez les temps d'exécution des algorithmes classiques et de celui-ci
J'ai encore simplifié l'algorithme pour gagner plus de temps. je posterai plus tard.
Merci
- yoshi
- 26-11-2020 10:01:49
Bonjour Omhaf,
Et si tu nous disais pourquoi 12 ? pourquoi pas 6 ? 14 ? 18 ?
Tu n'as pas choisi 12 par hasard, alors ?
@+
- Omhaf
- 25-11-2020 23:38:28
Bonne nuit 48PierrelePetit
Moi même je ne peux expliquer le raisonnement mais la réalité est la .... et ça marche !
Essayons donc tous de comprendre comment et pourquoi ça marche.
J'ai remodelé l'algorithme et gagné encore du temps d'exécution
@ plus et merci de vos participations
- Omhaf
- 25-11-2020 22:59:14
Re
Le compteur traitera 13 avec son carré 169 car racine(13) n'est pas entier et l'acceptera mais ce que tu n'as pas compris c'est lorsque le compteur arrivera a 169 Il ne calculera pas 169² car la racine de 169 est 13 qui est Entier
- Omhaf
- 25-11-2020 22:38:28
Bonjour 48PierrelePetit
écarter 81 ou 169 par exemple dans la boucle principale qui sont des carrés de 9 et 13 te pose un problème dans la tête ?
je crois que tu t'es précipité dans tes propos ou bien tu as raison je dois m'arrêter et je dois te remercier du conseil
Pourquoi faut il toujours que je reçoive des coups dans ce forum ? ne sommes nous pas entre intellectuels qui pourraient excuser et corriger poliment les erreurs des autres ?
- Omhaf
- 25-11-2020 20:56:42
Bonsoir 48PierrelePetit
Disons que c'est une conjecture pour l'instant et appelons la Conjecture Omar
ça te va ? hhhhhh
Non, sérieusement l'apport neuf à mon avis est comme suit
1 er Ecarter les nombres dont la racine est un entier
2 eme soit N le nombre en cours et N' le nombre premier qui précède
si (N-N")/12 est un entier on continue