Voir le sujet précédent :: Voir le sujet suivant |
Auteur |
Message |
Guimzo
Inscrit le: 02 Juin 2012 Messages: 209
|
Posté le: 28 Juin 2012 19:10 Sujet du message: Fonction Prevprime |
|
|
Bonjour ALS,
Encore besoin de votre aide pour construire une séquence qui à partir d'un nombre donné " a " calcule d'une part la racine carré de a ; ensuite effectue des divisions successives de a par le nombre premier a1 venant juste avant la racine de a et ainsi de suite le nombre premier a2 venant avant ce nombre a1 ensuite a3 avant a2 etc jusqu'à tomber sur un quotient entier et donc stopper les divisions.
Voilà ce qui a déjà été fait :
a:= 1000000;
r:=sqrt(a):print(racine_de_a =r );
do a1 := prevprime(r) ; d:=a/a1; q :=whattype(d) ; if ( q=integer ) then print(" DIVISION TERMINE..! ")else 0 fi end ;
Au lieu de continuer à calculer le prevprime de 997 et ainsi de suite prevprime de prevprime(997) etc ça reste que sur 997. ....? |
|
Revenir en haut de page |
|
|
ALS
Inscrit le: 11 Sep 2006 Messages: 647
|
Posté le: 29 Juin 2012 6:32 Sujet du message: |
|
|
Bonjour,
Il fallait réaffecter a par a1 ( a:=a1 ) pour que la boucle se poursuive correctement et prendre a1:=prevprime(floor(r)), car prevprime n'agit que sur des entiers. Du coup, vous pouvez partir d'un a qui n'est pas forcément un carré parfait.
Code: |
> a:= 1000000;
> do
> r:=sqrt(a):print(racine_de_a =r );
> a1 := prevprime(floor(r)) ; d:=a/a1; if type(d,integer) then print(" DIVISION TERMINEE..! "): break else a:=a1 fi end do;
a := 1000000
r := 1000
racine_de_a = 1000
a1 := 997
1000000
d := -------
997
1/2
r := 997
1/2
racine_de_a = 997
a1 := 29
997
d := ---
29
1/2
r := 29
1/2
racine_de_a = 29
a1 := 3
d := 29/3
1/2
r := 3
1/2
racine_de_a = 3
Error, (in prevprime) there are no primes less than 2
|
Ca se terminera souvent par ce message d'erreur, car à un certain moment, on atteindra la valeur 2 qui n'a pas d'entier premier devant lui.
Le break fera sortir de la boucle dès que je trouve un diviseur d. |
|
Revenir en haut de page |
|
|
Guimzo
Inscrit le: 02 Juin 2012 Messages: 209
|
Posté le: 29 Juin 2012 14:05 Sujet du message: Fonction Prevprime |
|
|
Bonjour ALS,
La séquence calcule les racines carrés successives mais je voudrais qu'elle calcule les nombres premiers du plus grand au plus petit qui sont justes avant la racine carré du nombre donné a.
Exemple on avait pris a = 1 000 000
Donc sqrt(a) = 1000
( on arrondirait à l'entier le plus proche
dans le cas où ce serait un décimal )
donc prevprime(1000) = 997
prevprime(997) = 991
prevprime(991) = 983
etc et à chaque fois effectuant les divisions du nombre de départ a par ces prevprimes trouvés
Donc 1 000 000 / 997 = .....
1 000 000 / 991 = ......
1 000 000 / 983 = ......
Et quand le résultat de la division est un integer arrêter la séquence. |
|
Revenir en haut de page |
|
|
ALS
Inscrit le: 11 Sep 2006 Messages: 647
|
Posté le: 30 Juin 2012 8:29 Sujet du message: |
|
|
Bonjour,
Je n'avais pas compris comme ça. Donc faites:
Code: |
> a:= 1000000;
> r:=sqrt(a):print(racine_de_a =r );
> while r>2 do
> a1 := prevprime(r) ; d:=a/a1; if type(d,integer) then print(" DIVISION TERMINEE..! "): break else r:=a1 fi end do;
|
Ca devrait convenir maintenant. |
|
Revenir en haut de page |
|
|
Guimzo
Inscrit le: 02 Juin 2012 Messages: 209
|
Posté le: 30 Juin 2012 15:26 Sujet du message: Fonction Prevprime |
|
|
Bonjour ALS
Merci beaucoup la séquence tourne comme sur des roulettes..!! : )
J'ai rajouté la fonction "round" au cas des sqrt qui donneraient un décimal.
Digits:=15;
a:= 21746597;
r:=round(sqrt(a)):print(racine_de_a =r );
while r>2 do
a1 := prevprime(r) ; d:=a/a1:div:=d,[d,evalf(d)] ;if type(d,integer) then print(" DIVISION TERMINEE..! "): break else r:=a1 fi end do; |
|
Revenir en haut de page |
|
|
|