|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre du Club
![]() Doctorant en Astrophysique Inscription : mars 2009 Messages : 234 ![]() |
Bonjour.
J'aimerai savoir si il y a un moyen sioux très rapide de tester la divisibilité d'un nombre N = 2^n-1 (donc une suite de n "1" en binaire) par un autre nombre D avec n pouvant être très grand (possibilité d'utiliser une libraire pour de la précision arbitraire) et D un entier 64 bits. (ou dit autrement, tester si (2^n-1)%D == 0) . Merci |
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() Inscription : août 2006 Messages : 3 195 ![]() |
Pye,
Ce sont des nombres de Mersennes, une petite recherche s'impose.
__________________
Il court en ce moment une espèce de grippe, mais elle ne court pas très vite, car on peut l'attraper sans courir. |
|
|
10
|
|
|
#3 |
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 419 ![]() |
D'autant plus qu'on n'en connait pour l'instant qu'une 50aine. Un simple switch/case devrait suffire pour ton test.
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|
00
|
|
|
#4 | |
|
Expert Confirmé
![]() Inscription : août 2006 Messages : 3 195 ![]() |
Fue,
Citation:
De mémoire le plus grand trouvé dans ce cas correspond à n > 43 000 000, je ne sais plus précisément.
__________________
Il court en ce moment une espèce de grippe, mais elle ne court pas très vite, car on peut l'attraper sans courir. |
|
|
|
00
|
|
|
#5 |
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 419 ![]() |
Ah oui, mince. Lu trop vite.
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|
00
|
|
|
#6 | |
![]() ![]() |
Citation:
http://en.wikipedia.org/wiki/Mersenn...ersenne_primes Bourrinés à coups de GIMPS |
|
|
00
|
|
|
#7 |
|
Membre du Club
![]() Doctorant en Astrophysique Inscription : mars 2009 Messages : 234 ![]() |
Je m'étais renseigné sur les nombres de Mersenne avant, et ce n'est pas ce que je recherche. Un nombre de Mersenne est un nombre, effectivement de la forme 2^n-1 mais où, dans la plupart des définitions que l'on trouve, n est premier.
Mais ce qui m'intéresse est la chose suivante : à n donné (genre 1 milliard (donc 2^(10^9) ne passe bien entendu pas en mémoire), j'ai une liste de nombres D (genre 1 million de D différents) et je veux savoir le plus rapidement possible lesquels parmi ceux là divisent 2^n-1. Ma problématique n'est donc pas la même que celle des nombres de Mersenne premiers... Si vous avez des idées... |
|
|
00
|
|
|
#8 |
|
Expert Confirmé Sénior
![]() Inscription : janvier 2007 Messages : 8 740 ![]() |
Déjà tu as un petit problème, là
![]() Maintenant, qu'entends-tu par : J'avoue ne pas comprendre .. Pose correctement ton problème, stp, parce que là c'est un peu flou..
__________________
"Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle". Consultant indépendant. Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie. C, Fortran, XWindow/Motif, Java Je ne réponds pas aux MP techniques |
|
|
00
|
|
|
#9 | |
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 419 ![]() |
Citation:
Cela dit, avec un "n" proche de 1 milliard, ca risque quand même de prendre plusieurs secondes pour chaque D, donc plusieurs mois de calculs au total. ![]() NB: et pour le fun, (2^(10^9)-1) est divisible par 5 d'après mon programme.
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|
|
00
|
|
|
#10 | ||
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 419 ![]() |
Oublié de poster le code.
Code java :
NB : ce code peut être optimisé pour la vitesse, en particulier sur les calculs de modulo car les valeur de 'r' et 'sum' n'augmentent pas de beaucoup à chaque tour de boucle.
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
||
|
00
|
Copyright © 2000-2012 - www.developpez.com