Apprendre Maple Index du Forum Apprendre Maple
Site dédié au logiciel de calcul formel Maple
 
  Page d'accueilPage d'accueil   FAQFAQ    RechercherRechercher    Liste des MembresListe des Membres    Groupes d'utilisateursGroupes d'utilisateurs 
S'enregistrerS'enregistrer    ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 

Réduction Nombre premier

 
Poster un nouveau sujet   Répondre au sujet    Apprendre Maple Index du Forum -> Séquences, listes, ensembles, tables ou tableaux...
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
Guimzo



Inscrit le: 02 Juin 2012
Messages: 209

MessagePosté le: 02 Juil 2012 4:52    Sujet du message: Réduction Nombre premier Répondre en citant

Bonsoir ALS,



Séquence Numéro énième : )
Elle part de la supposition* que tous les nombres premiers p pourraient s'écrire de la forme

p = u * [ (a^n) - c ]

avec u, a, n, et c variant de 1 à l'infini mais pour rester raisonnable : )
on va dire variant de 1 à 9 donc seulement pour certains nombres premiers.


Sont inclus donc dans le lot les fameux [ ( 2^n ) - 1 ] de Mersenne aussi...



L'idée est donc de travailler avec toutes les séquences de la forme :

a * [ ( 2^n ) - c ]

a * [ ( 3^n ) - c ]

a * [ ( 4^n ) - c ]

a * [ ( 5^n ) - c ]

etc.........
( avec le a qui varie de 1 à 9 aussi et le n variant de 1 à 200 et le c de 1 à 9 )


Voilà le début....


Digits:=200;
p:=37975227936943673922808872755445627854565536638199;
length(p);
for u to 9 do b:=seq(((u^n)-8 ),n=1..200):
end do:
c:=seq(p/r,r=b):
select(x->type(x,posint),[(c)]);


On a donc pris un nombre premier " p " et on divise ce nombre par tous les nombres formés de notre séquence u * [ (a^n) - c ]

Ainsi s'il se trouve dans le lot un nombre qui est égal à " p " alors la division nous renverra le nombre 1.

Mais comment faire pour que le " select " renvoie aussi les résultats qui seraient égaux à 0.5 à 0.25 à 1/3..
( cas en fait où les nombres fabriqués seraient des multiples de " p " et ainsi par exemple ( p / 2p ) = 1/2 )

Comment faire varier aussi le 8 de 1 à 9...?

for u to 9 do b:=seq(((u^n)-8),n=1..200):

Et quand un résultat nous est renvoyé avec le " select " comment retrouver les valeurs des variables u * [ (a^n) - c ] qui ont conduit au résultat....?


P.S.: On sait que l'un des 2 facteurs d'un nombre semi-premier p est inférieur à la racine carrée de p mais arrive t-on à borner ces facteurs avec encore plus de précisions.....?
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
ALS



Inscrit le: 11 Sep 2006
Messages: 647

MessagePosté le: 02 Juil 2012 8:09    Sujet du message: Répondre en citant

Si j'ai bien compris, voici ce que l'on pourrait faire (j'affiche u,n,c,u^n-c) :

Code:

> Digits:=200;
> p:=37975227936943673922808872755445627854565536638199;
> b:=NULL:
> for u to 9 do
> for c to 9 do
> b:=b,seq([u,n,c,u^n-c],n=1..200):
> end do
> end do:
> c:=NULL:
> for r in b do
>   try
>   if type(p/r[4],posint) then c:=c,r fi:
>   catch:
>   end try
> od:
> c;

                            Digits := 200


       p := 37975227936943673922808872755445627854565536638199


  [2, 1, 1, 1], [2, 2, 3, 1], [2, 3, 7, 1], [3, 1, 2, 1],

        [3, 2, 8, 1], [4, 1, 3, 1], [5, 1, 4, 1], [6, 1, 5, 1],

        [7, 1, 6, 1], [8, 1, 7, 1], [9, 1, 8, 1]



A plus tard.
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
Guimzo



Inscrit le: 02 Juin 2012
Messages: 209

MessagePosté le: 02 Juil 2012 14:55    Sujet du message: Réduction Nombre premier Répondre en citant

Bonjour ALS,




Merci pour cette première séquence qui m'est fort utile pour la suite.
Mais m'étant perdu en trop d'explications du coup je me suis mal exprimé....

En fait comment déjà simplifier la séquence suivante où de a1 à a9 on fait simplement varier le " a " dans l'expression [ (a^n) - 1 ]
de 1 à 9.....?
Et comment éviter aussi les " exception: division by zero "



Digits:=100;
p:=12345678910;
length(p);
a1:=seq(1^n-1,n=1..200):
s1:=seq(p/r,r=a1):
select(x->type(x,posint),[(s1)]);
a2:=seq(2^n-1,n=1..200):
s2:=seq(p/r,r=a2):
select(x->type(x,posint),[(s2)]);
a3:=seq(3^n-1,n=1..200):
s3:=seq(p/r,r=a3):
select(x->type(x,posint),[(s3)]);
a4:=seq(4^n-1,n=1..200):
s4:=seq(p/r,r=a4):
select(x->type(x,posint),[(s4)]);
a5:=seq(5^n-1,n=1..200):
s5:=seq(p/r,r=a5):
select(x->type(x,posint),[(s5)]);
a6:=seq(6^n-1,n=1..200):
s6:=seq(p/r,r=a6):
select(x->type(x,posint),[(s6 )]);
a7:=seq(7^n-1,n=1..200):
s7:=seq(p/r,r=a7):
select(x->type(x,posint),[(s7)]);
a8:=seq(8^n-1,n=1..200):
s8:=seq(p/r,r=a8 ):
select(x->type(x,posint),[(s8 )]);
a4:=seq(4^n-1,n=1..200):
s9:=seq(p/r,r=a9):
select(x->type(x,posint),[(s9)]);


Digits := 100
p := 12345678910
11
Error, numeric exception: division by zero

[]
[12345678910]
[6172839455]
[]
[]
[2469135782]
[]
[]
[]


Voilà au lieu d'écrire une séquence si lourde a1, a2, a3, a4 etc ne pourrait-on pas simplifier....?
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
Guimzo



Inscrit le: 02 Juin 2012
Messages: 209

MessagePosté le: 02 Juil 2012 17:09    Sujet du message: Réduction Nombre premier Répondre en citant

Bonjour ALS,




Voilà une séquence déjà moins lourde que la précédente mais j'ai été obligé de ne pas inclure " a1 " dans la ligne
" s:=seq(p/r,r=[a2,a3,a4,a5,a6,a7,a8,a9]): "

Parce ce que avec ( 1^n-1 ) quelque soit n le résultat c'est 0 et après ça bloque le reste des résultats avec " error division by 0 "



Digits:=100;
p:= 12345678910;
length(p);
a1:=seq(1^n-1,n=1..200):
a2:=seq(2^n-1,n=1..200):
a3:=seq(3^n-1,n=1..200):
a4:=seq(4^n-1,n=1..200):
a5:=seq(5^n-1,n=1..200):
a6:=seq(6^n-1,n=1..200):
a7:=seq(7^n-1,n=1..200):
a8:=seq(8^n-1,n=1..200):
a9:=seq(9^n-1,n=1..200):
s:=seq(p/r,r=[a2,a3,a4,a5,a6,a7,a8,a9]):
select(x->type(x,posint),[(s)]);


Comment encore simplifier la séquence.....?

Et comment inclure "a1" dans la séquence s en évitant le probléme de division par 0.......?
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
Guimzo



Inscrit le: 02 Juin 2012
Messages: 209

MessagePosté le: 02 Juil 2012 17:49    Sujet du message: Réduction Nombre premier Répondre en citant

Re-bonjour ALS,





Pour éviter le probléme avec la division par " 0 " dans le cas de la séquence " a1 " finalement voilà entres autres :



Digits:=100;
p:=2305843009213693951 ;
length(p);
a1:=seq(1^n-1,n=1..200):
a1:=NULL:
a2:=seq(2^n-1,n=1..200):
a3:=seq(3^n-1,n=1..200):
a4:=seq(4^n-1,n=1..200):
a5:=seq(5^n-1,n=1..200):
a6:=seq(6^n-1,n=1..200):
a7:=seq(7^n-1,n=1..200):
a8:=seq(8^n-1,n=1..200):
a9:=seq(9^n-1,n=1..200):
s:=seq(p/r,r=[a1,a2,a3,a4,a5,a6,a7,a8,a9]):
select(x->type(x,posint),[(s)]);

Digits := 100
p := 2305843009213693951
19
[2305843009213693951, 1]


Maintenant le probléme est toujours de savoir comment simplifier encore la séquence et comment savoir quelle(s) opération(s) qui ont conduit au résultat " 1" ......?
Est-ce une opération dans a2 ou a3 ou a4 ou a5.....a9......?
Quelles sont les valeurs que doivent prendre les variables "a" et "n" dans
[ (a^n) - c ] ........?


Dans cet exemple avec le nombre 2305843009213693951 les valeurs des variables sont 2 et 61

ainsi on a effectivement ( 2^61 ) - 1 = 2305843009213693951

Dans les résultats que renvoient donc Maple il faudrait que le résultat renvoie aussi une liste du style :

res:= [ a = 2 ; n = 61 ; (2305843009213693951/(2^61 -1) = 1 ]
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
Guimzo



Inscrit le: 02 Juin 2012
Messages: 209

MessagePosté le: 03 Juil 2012 4:34    Sujet du message: Réduction Nombre premier Répondre en citant

Bonjour ALS,




Voilà le dernier état de la séquence :


Digits:=100;
p:=2391484;
length(p);
a1:=seq(1^n-1,n=1..100):
a1:=NULL:
a2:=seq(2^n-1,n=1..100):
a3:=seq(3^n-1,n=1..100):
a4:=seq(4^n-1,n=1..100):
a5:=seq(5^n-1,n=1..100):
a6:=seq(6^n-1,n=1..100):
a7:=seq(7^n-1,n=1..100):
a8:=seq(8^n-1,n=1..100):
a9:=seq(9^n-1,n=1..100):
a10:=a1,a2,a3,a4,a5,a6,a7,a8,a9 :
s1:=seq(p/r,r=[a10]):
select(x->type(x,posint),[(s1)]);
i1:=seq(i,i=1..10):
j1:=seq(i1*k,k=[a10]):
s2:=seq(p/v,v=[j1]):
select(x->type(x,posint),[(s2)]);
for x in s1 do
if x = 1/2
or x = 1/3
or x = 1/4
or x = 1/5
or x = 1/6
or x = 1/7
or x = 1/8
or x = 1/9
or x = 1/10
then print (x);fi;end do;



Le changement c'est que désormais dans la formule

u * [ (a^n) - c ]

on arrive à faire varier comme voulu le " u " le " a " et le " n " il manque par contre à trouver comment faire pour le c de 1 à 10 et le signe "-" en "+".

Nouveau aussi maple renvoie les cas où la division de

p / [ u * (a^n) - c ] = 1/2 ou 1/3 ou 1/4....1/10


Mais comment éviter les doublons que par exemple dans le cas de plusieurs quotients égaux à 1/2 maple ne donne qu'un seul cas....?

Et toujours aussi le même probléme de la formulation des résultats qui devraient ressembler à cette forme :

res:= [ a = 2 ; n = 61 ; (2305843009213693951/(2^61 -1) = 1 ]

Et bien entendu comment simplifier la séquence .....?


P.S.: En prenant p = 123456789101112131415161718......n..n+1
On voit que p = 3 * 41152263033704043805053906......par intermittence.
et donc que p peut s'écrire.......
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
ALS



Inscrit le: 11 Sep 2006
Messages: 647

MessagePosté le: 03 Juil 2012 7:55    Sujet du message: Répondre en citant

Bonjour,

J'ai rajouté une boucle sur c de 1 à 9, et appelé a[k,c] la séquence des k^n-c,n=1..100. et a[10,c] la séquence des a[j,c], j=2..9.

Pour rajouter des résultats avec un + à la place du moins, vous remplacez la ligne a[k,c]:=seq(k^n-c,n=1..100): par celle ci:
a[k,c]:=seq(k^n-c,n=1..100),seq(k^n+c,n=1..100):

J'évite les exceptions numériques du style division par 0 en rajoutant des try ... catch: end try

A la fin j'élimine les doublons en créant un ensemble e que je convertit à la fin en liste.

Code:

> Digits:=100;
> p:=2391484;
> for c to 9 do
> for k from 2 to 9 do
> a[k,c]:=seq(k^n-c,n=1..100)
> od:
> a[10,c]:=seq(a[j,c],j=2..9):
> try
> s1:=seq(p/r,r=[a[10,c]]): print(s1);
> catch:
> end try:
> select(x->type(x,posint),[s1]);
> i1:=seq(i,i=1..10):
> j1:=seq(i1*l,l=[a[10,c]]):
> try
> s2:=seq(p/v,v=[j1]): 
> catch:
> end try:
> select(x->type(x,posint),[s2]): 
> e:={}:
> for x in s1 do
> if x = 1/2
> or x = 1/3
> or x = 1/4
> or x = 1/5
> or x = 1/6
> or x = 1/7
> or x = 1/8
> or x = 1/9
> or x = 1/10
> then e := e union {x};fi;end do:
> e:=convert(e,list): print(e);
> od:
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
Guimzo



Inscrit le: 02 Juin 2012
Messages: 209

MessagePosté le: 03 Juil 2012 18:40    Sujet du message: Réduction Nombre premier Répondre en citant

Bonjour ALS,




Merci pour ces nettes améliorations.
Quelques questions :


Question 1.

a[k,c]

Vous avez choisi cette formulation pour sous-entendre que l'on fait varier k et c.....?

Question 2.

a[10,c]:=seq(a[j,c],j=2..9)

Pouvez-vous expliquer en quoi consiste cette ligne s'il vous plait et en particulier le choix de la formulation a[10,c] ....?


Question 3.


Dans cette partie :


p:=8862938119652501095926;
for c to 9 do
for k from 2 to 9 do
a[k,c]:=seq(k^n-c,n=1..100)
od:
a[10,c]:=seq(a[j,c],j=2..9):
try
s1:=seq(p/r,r=[a[10,c]]): print(s1);
catch:
end try:
select(x->type(x,posint),[s1]);end;


Il y à t-il possibilité de ne pas afficher dans les résultats tous les calculs précédents la ligne
select(x->type(x,posint),[s1]);..........?
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
Guimzo



Inscrit le: 02 Juin 2012
Messages: 209

MessagePosté le: 03 Juil 2012 20:33    Sujet du message: Réduction Nombre premier Répondre en citant

Re-bonjour ALS,




En restant sur cette petite formulation


Digits:=100;
p:=2305843009213693951;
length(p);
a2:=seq(2^n-1,n=1..100):
a3:=seq(3^n-1,n=1..100):
a4:=a1,a2,a3 :
s1:=seq(p/r,r=[a4]):
select(x->type(x,posint),[(s1)]);

Digits := 100
p := 2305843009213693951
19
[2305843009213693951, 1]



Question 4.


Comment faire pour que Maple renvoie les valeurs de " n " qui ont conduit aux résultats [2305843009213693951, 1].........?

J'ai essayé avec la ligne :

for x in a2
for x in a3
do if x = p then print ([(n)]);end if;end do;

mais ça ne fonctionne pas Sad
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
Guimzo



Inscrit le: 02 Juin 2012
Messages: 209

MessagePosté le: 04 Juil 2012 2:32    Sujet du message: Réduction Nombre premier Répondre en citant

Bonsoir ALS,




Question 5.


Comment former un nombre qui soit de cette forme :

((((((a*2)+1)*2+1)*2+1)*2+1)*2+1)*2+1...........

où " a " varie de 1 à 9

et le nombre inférieur à une borne donnée

Par exemple a = 3
et jusqu'à 1000.

((((((3*2)+1)*2+1)*2+1)*2+1)*2+1)*2+1.........<1000


J'ai commencé à faire ça mais ça serait plus que long d'écrire à chaque fois (2*a)+1.....


a:=seq(a,a=1..10);
s:=seq(((((((b*2)+1)*2+1)*2+1)*2+1)*2+1)*2+1,b=a);
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
ALS



Inscrit le: 11 Sep 2006
Messages: 647

MessagePosté le: 04 Juil 2012 7:07    Sujet du message: Répondre en citant

Bonjour,

Question 1.
Comme je suis à l'intérieur d'une double boucle sur c et k,
a[k,c] est une variable tableau, une pour chaque valeur de k et de c ( exemple a[2,3] pour k=2 et c=3).

Question 2.
a[10,c]:=seq(a[j,c],j=2..9) est identique à a[10,c]:=a[2,c],a[3,c],..,a[9,c] et ce, pour chaque valeur de c qui varie dans sa boucle.
J'ai choisi a[10,c] car au départ vous avez choisi a10 comme nom, mais j'aurais pu l'appeler b[c] par exemple.

Question 3.
En général, vous remplacez ; par : pour ne pas afficher certaines lignes.
Vous supprimez print(s1) pour ne pas avoir l'affichage de s1.
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
ALS



Inscrit le: 11 Sep 2006
Messages: 647

MessagePosté le: 04 Juil 2012 7:17    Sujet du message: Répondre en citant

Question 4:

Code:

> Digits:=100;
> p:=2305843009213693951;
> length(p);
> a2:=seq([n,2^n-1],n=1..100):
> a3:=seq([n,3^n-1],n=1..100):
> a4:=a1,a2,a3 :
> s1:=NULL:
> for r in a4 do
>    if type(p/r[2],posint) then s1:=s1,r fi:
> od:
> s1;

                            Digits := 100


                       p := 2305843009213693951


                                  19


                  [1, 1], [61, 2305843009213693951]


[/quote]
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
ALS



Inscrit le: 11 Sep 2006
Messages: 647

MessagePosté le: 04 Juil 2012 7:25    Sujet du message: Répondre en citant

Question 5.

Code:

> suite:=proc(a::numeric,maxi::numeric)
> local k,s:
> s:=a:
> while s*2+1<maxi do
>   s:=s*2+1
> od:
> s
> end proc:
 
> for a to 9 do suite(a,1000) od;

                                 511


                                 767


                                 511


                                 639


                                 767


                                 895


                                 511


                                 575


                                 639


Ca fait beaucoup de questions à la fois je trouve, et ce soir je suis en vacances!!.
Merci.
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
Guimzo



Inscrit le: 02 Juin 2012
Messages: 209

MessagePosté le: 04 Juil 2012 13:34    Sujet du message: Répondre en citant

ALS a écrit:
Question 4:

Code:

> Digits:=100;
> p:=2305843009213693951;
> length(p);
> a2:=seq([n,2^n-1],n=1..100):
> a3:=seq([n,3^n-1],n=1..100):
> a4:=a1,a2,a3 :
> s1:=NULL:
> for r in a4 do
>    if type(p/r[2],posint) then s1:=s1,r fi:
> od:
> s1;

                            Digits := 100
                       p := 2305843009213693951
                                 19
                  [1, 1], [61, 2305843009213693951]


[/quote]


Bonjour ALS,


Magnifique merci...! : )
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
Guimzo



Inscrit le: 02 Juin 2012
Messages: 209

MessagePosté le: 04 Juil 2012 14:13    Sujet du message: Réduction Nombre premier Répondre en citant

ALS a écrit:
Question 5.

Code:

> suite:=proc(a::numeric,maxi::numeric)
> local k,s:
> s:=a:
> while s*2+1<maxi do
>   s:=s*2+1
> od:
> s
> end proc:
 
> for a to 9 do suite(a,1000) od;

                                 511
                                 767
                                511
                                 639
                                 767
                                 895
                                 511
                                 575
                                639


Ca fait beaucoup de questions à la fois je trouve, et ce soir je suis en vacances!!.
Merci.




Re-bonjour ALS,


Une vraie merveille merci....! : )
Et puis c'est vrai que je sollicite votre aide pour une montagne de questions ....auxquelles pourtant vous m'apportez des solutions à une vitesse et une facilité impressionnante...
Merci pour toute cette générosité que la Bonne Fatalité vous le rende mille fois....!

Reposez-vous bien et je vous souhaite de merveilleuses vacances...!
Cordialement,
G.
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Apprendre Maple Index du Forum -> Séquences, listes, ensembles, tables ou tableaux... Toutes les heures sont au format GMT + 2 Heures
Page 1 sur 1

 
Sauter vers:  
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


phpBB

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.