|
Apprendre Maple Site dédié au logiciel de calcul formel Maple
|
Voir le sujet précédent :: Voir le sujet suivant |
Auteur |
Message |
Guimzo
Inscrit le: 02 Juin 2012 Messages: 209
|
Posté le: 25 Juin 2012 4:12 Sujet du message: Nombre de Mersenne |
|
|
Bonjour ALS,
Encore moi pour un nouveau post
Nouveau projet : )
Soit x un nombre semi-premier donné
Soit a et b un intervalle de nombres premiers donnés [a,b]
Alors en fait je voudrais fabriquer une séquence qui calcule tous les nombres de Mersenne [ ( 2^p ) - 1 ] à partir des nombres premiers de l'intervalle [a, b] donné.
Ensuite que la séquence divise le nombre semi-premier x donné par chacun des nombres de Mersenne générés et stopper la division quand le résultat est un entier...
Voilà ce que j'ai commencé à faire :
( Exemple de semi-premier 655957 = 769*863)
x:= 655957;
M :=( 2^n) -1;
seq(M,n=[1..997]);
d:= x/M ; e:= whattype(d) ; if ( d=integer ) then print(" Fin des divisions ")and print( TERMINE ) else 0 fi end; |
|
Revenir en haut de page |
|
|
ALS
Inscrit le: 11 Sep 2006 Messages: 647
|
Posté le: 25 Juin 2012 17:38 Sujet du message: |
|
|
Bonjour,
Si j'ai bien compris ce que vous voulez faire, ça se traduirait par ce code:
Code: |
> x:= 655957:
> s:=seq(2^n-1,n=1..997):
> for M in s do
> d:= x/M:
> if type(d,integer ) then print(M," Fin des divisions. TERMINE" ) else 0 fi
> od:
1, " Fin des divisions. TERMINE"
|
Le problème est que la première valeur de M est 2^1-1=1, donc on va s'arreter tout de suite.
A plus. |
|
Revenir en haut de page |
|
|
Guimzo
Inscrit le: 02 Juin 2012 Messages: 209
|
Posté le: 27 Juin 2012 3:46 Sujet du message: Nombre de Mersenne |
|
|
Bonjour ALS,
Votre passion pour les Mathématiques la gentillesse et la patience de vos réponses , encore mille fois merci..!
Alors effectivement pour n=1 on a m/n = m.
Donc j'ai un peu changé la séquence qui consisterait à donner d'une part les nombres de Mersenne générés.
Ensuite de donner les résultats des divisions sous leur forme fractionnaire accolées d'une évaluation décimale et indiquer la nature du résultat "fraction ou integer".
Mais j'en suis qu' à ce point je ne vois pas comment mettre les 2 résultats fraction + décimale et le integer ou fraction avec whattype...
x:= 655957: print( Semi-Premier = x);
> m:= [seq( 2^n -1, n=1..10 )]: print ( Nombre-Mersenne =m );
> d:= [seq( x/m ,m= [seq( 2^n -1, n=1..10 )])]: print ( Divisions =d );
>
> |
|
Revenir en haut de page |
|
|
ALS
Inscrit le: 11 Sep 2006 Messages: 647
|
Posté le: 27 Juin 2012 6:24 Sujet du message: |
|
|
Merci,
Voici ce que je vous propose:
Code: |
> x:= 655957: print( Semi-Premier = x);
> s:= [seq( 2^n -1, n=1..10 )]: print ( Nombre-Mersenne =m );
> d:= [seq( [x/m=evalf(x/m),`if`(type(x/m,integer),`integer`,`fraction`)] ,m= s)]: print ( Divisions =d );
Semi - Premier = 655957
Nombre - Mersenne = [1, 3, 7, 15, 31, 63, 127, 255, 511, 1023]
Divisions = [[655957 = 655957., integer],
[655957/3 = 218652.3333, fraction],
[655957/7 = 93708.14286, fraction],
655957
[------ = 43730.46667, fraction],
15
655957
[------ = 21159.90323, fraction],
31
655957
[------ = 10412.01587, fraction],
63
655957
[------ = 5165.015748, fraction],
127
655957
[------ = 2572.380392, fraction],
255
655957
[------ = 1283.673190, fraction],
511
655957
[------ = 641.2091887, fraction]]
1023
|
A bientôt. |
|
Revenir en haut de page |
|
|
Guimzo
Inscrit le: 02 Juin 2012 Messages: 209
|
Posté le: 27 Juin 2012 13:07 Sujet du message: Nombre de Mersenne |
|
|
Bonjour ALS,
A la 2 éme ligne comme j'avais changé le nom des variables j'ai mis "s" à la place du "m" dans la chaîne " Nombre-Mersenne =m ".
La séquence fonctionne à merveille c'est exactement ce qu'il me fallait...!!
Le nombre de Merci que les internautes ont déjà dû vous dire doit sans doute tendre vers +l'infini, j'en rajoute un Merci de + à cette suite infinitésimale : )
Merci ALS...!
Soyez mille fois Béni ! |
|
Revenir en haut de page |
|
|
Guimzo
Inscrit le: 02 Juin 2012 Messages: 209
|
Posté le: 28 Juin 2012 18:50 Sujet du message: Nombre de Mersenne |
|
|
Bonjour ALS,
Pour aller plus loin peut-on aussi fabriquer une séquence qui à partir d'un nombre premier donné p nous dirait si oui ou non ce nombre premier est de Mersenne....?
Et si oui donner la valeur de n tel que
p = 2^n - 1.................?? |
|
Revenir en haut de page |
|
|
ALS
Inscrit le: 11 Sep 2006 Messages: 647
|
Posté le: 29 Juin 2012 6:15 Sujet du message: |
|
|
Bonjour,
Vous pouvez utiliser la fonction mersenne qui existe dans le package de théorie des nombres numtheory:
Citation: |
The function mersenne computes Mersenne primes. If the argument n is an integer then mersenne(n) will return
n
2 - 1
if
n
2 - 1
is known to be prime. Otherwise, if n is prime, but
n
2 - 1
is not determinably prime, then mersenne(n) will return FAIL. Finally, if n is composite it will return false.
If the argument is a list with one integer element [i], then mersenne([i]) will return the ith Mersenne prime. If the value is beyond Maple's precomputed list of Mersenne primes, an error will be issued.
|
Code: |
> with(numtheory):
> mersenne(3);
7
> mersenne([3]);
31
> mersenne(4);
false
> mersenne(224737);
false
|
A +. |
|
Revenir en haut de page |
|
|
Guimzo
Inscrit le: 02 Juin 2012 Messages: 209
|
Posté le: 29 Juin 2012 13:42 Sujet du message: Nombre de Mersenne |
|
|
Bonjour ALS,
Merci,
A bientôt. |
|
Revenir en haut de page |
|
|
Guimzo
Inscrit le: 02 Juin 2012 Messages: 209
|
Posté le: 29 Juin 2012 18:10 Sujet du message: Nombre de Mersenne |
|
|
Bonjour ALS,
Alors la fonction mersenne(n) calcule effectivement la valeur de ( 2^n) - 1
Mais dans le cas inverse qui m' intéressait c'est de partir d'un nombre donné que l'on sait être premier et que maple dise si oui ou non le nombre donné est un nombre qui peut s'écrire de la forme ( 2^n) - 1.............?
Par exemple prenons le nombre premier 127.
On sait que 127 est un nombre premier
Mais peut-il s'écrire de la forme ( 2^n) - 1.......?
Dans ce cas oui 127 peut s'écrire (2^7) - 1
Or 7 est lui-même premier donc 127 est un nombre de Mersenne
Donc l'idée c'est de partir d'un nombre premier donné et voir si oui ou non ce nombre peut-être écrit sous la forme ( 2^n) - 1.........? |
|
Revenir en haut de page |
|
|
ALS
Inscrit le: 11 Sep 2006 Messages: 647
|
Posté le: 30 Juin 2012 8:33 Sujet du message: |
|
|
Bonjour,
je vous propose mieux, le test de Lucas Lehmer pour tester si p est un nombre de Mersenne.
Citation: |
Lucas Lehmer test for Mersenne primes
Let p be a prime > 2. Define n=2^p-1 . Also let s[1]=4, s[k+1] =s[k]^2-2 (mod n), for k>=1. Then n is prime if and only if s[p-1]=0 (mod n) .
|
Ce qui donne l'algorithme suivant:
Code: |
> Lucas_Lehmer := proc (p)
> local s, n, i;
> if p = 2 then true
> elif isprime(p) then
> s := 4; n := 2^p-1;
> for i to p-2 do
> s := `mod`(s^2-2,n)
> od;
> if s = 0 then true else false fi;
> else
> false
> fi
> end:
>
> for p to 100 do if Lucas_Lehmer(p) then print(p,2^p-1) fi od;
2, 3
3, 7
5, 31
7, 127
13, 8191
17, 131071
19, 524287
31, 2147483647
61, 2305843009213693951
89, 618970019642690137449562111
|
|
|
Revenir en haut de page |
|
|
Guimzo
Inscrit le: 02 Juin 2012 Messages: 209
|
Posté le: 30 Juin 2012 15:48 Sujet du message: Nombre de Mersenne |
|
|
Bonjour ALS,
Un merci de + dans ce grand océan de Merci : ) |
|
Revenir en haut de page |
|
|
|
|
Vous ne pouvez pas poster de nouveaux sujets dans ce forum Vous ne pouvez pas répondre aux sujets dans ce forum Vous ne pouvez pas éditer vos messages dans ce forum Vous ne pouvez pas supprimer vos messages dans ce forum Vous ne pouvez pas voter dans les sondages de ce forum
|
Développé par phpBB © 2001, 2006 phpBB Group
Traduction par : phpBB-fr.com
Apprendre Maple - ©
- Alain Le Stang - Navigation optimisée pour une résolution 1024 x 768.
|