Voir le sujet précédent :: Voir le sujet suivant |
Auteur |
Message |
Guimzo
Inscrit le: 02 Juin 2012 Messages: 210
|
Posté le: 06 Mar 2015 20:05 Sujet du message: Rechercher deux nombres premiers somme d'un nombre pair |
|
|
Bonjour ALS,
Pourriez-vous m'aider s'il vous plaît pour cette nouvelle programmation ; l'idée est de fabriquer un programme qui recherche 2 nombres premiers dont la somme de ces 2 nombres premiers donnerait un nombre pair prédéterminé.
Voici ce que j'ai fait :
1. On pose "p" comme étant le nombre pair prédéterminé
2. On divise "p" par sqrt(2), on ajoute 1 et on garde la partie entière qu'on nomme "e"
3.On introduit une boucle "do...while" qui calcule à chaque fois un nombre premier juste avant "e" qu'on nomme "m" et qui calcule si oui ou non l'opération (p-m = nombre premier) ; si (p-m) est premier c'est fini, et si (p-m) n'est pas premier, on recommence l'opération qui consiste à prendre le nombre premier juste avant "m" et ainsi de suite...
Maple :
=====================
restart;
Digits:=150;
p:=(1522605027922533360535618378132637429718068114961380688657908494580122963258952897654000350692006138);
P1:=length(p);
e:=floor(p/sqrt(2)+1);
m:=prevprime(e);
o:=p-m;
if isprime(o) then print(o) fi ;
==================
Alors ça fonctionne quand (p-m) = un nombre premier du premier coup, mais comment répéter l'opération jusqu'à trouver les deux premiers, quand l'opération (p-m) n'est pas un nombre premier...
P.S.: Avez-vous remarqué que le "p" choisi est le nombre RSA100 qu'on enlève 1 et qu'on peut donc écrire comme étant la somme de deux nombres premiers :
1522605027922533360535618378132637429718068114961380688657908494580122963258952897654000350692006138 =
1076644340312755880532680650576372710933150485625861359957904474683320818555587068016342553179333081 + 445960687609777480002937727556264718784917629335519328700004019896802144703365829637657797512673057 |
|
Revenir en haut de page |
|
 |
ALS
Inscrit le: 11 Sep 2006 Messages: 647
|
Posté le: 07 Mar 2015 8:06 Sujet du message: |
|
|
Bonjour, il suffisait d'englober les instructions dans une boucle do ... end do et mettre la valeur de o dans p pour pouvoir recommencer.
On sort de cette boucle par un break quand o est premier, auquel cas on affiche e et o.
Code: |
> restart;
> p:=(1522605027922533360535618378132637429718068114961380688657908494580122963258952897654000350692006138);
> do
> e:=floor(p/sqrt(2)+1);
> m:=prevprime(e);
> o:=p-m;
> if isprime(o) then print(e):print(o):break fi:
> p:=o;
> end do:
>
p := 15226050279225333605356183781326374297180681149613806886579\
08494580122963258952897654000350692006138
1076644340312755880532680650576372710933150485625861359957904474\
683320818555587068016342553179333640
4459606876097774800029377275562647187849176293355193287000040198\
96802144703365829637657797512673057
|
Voila, voilou... |
|
Revenir en haut de page |
|
 |
Guimzo
Inscrit le: 02 Juin 2012 Messages: 210
|
Posté le: 08 Mar 2015 3:51 Sujet du message: |
|
|
Bonjour ALS,
Merci infiniment : )
J'ai une question s'il vous plait tout autre :
Pourrait-on avec Maple construire un repère orthonormé gradué jusqu'à par exemple un nombre de 150 chiffres...? |
|
Revenir en haut de page |
|
 |
ALS
Inscrit le: 11 Sep 2006 Messages: 647
|
Posté le: 08 Mar 2015 7:14 Sujet du message: |
|
|
Bonjour,
Je pense que oui. Regardez la page d'aide "Plot Tickmarks and Gridlines".
On peut jouer sur xtickmarks.
A+ |
|
Revenir en haut de page |
|
 |
Guimzo
Inscrit le: 02 Juin 2012 Messages: 210
|
Posté le: 09 Mar 2015 0:10 Sujet du message: |
|
|
Bonsoir ALS,
Je vous mets un lien vers un graphique sur les nombres premiers :
Dans un repère orthonormé, je note chaque entier de 1 à l'infini sur l'axe des "x" et sur l'axe des "y" on met les nombres premiers successifs.
Par exemple on a x=1 correspond à y=2 ; x=2 correspond à y=3 ; x=3 correspond à y=5 ; x=4 correspond à y=7 ainsi de suite...
Je trace les perpendiculaires à l'axe des "x" et l'axe des "y" pour les nombres de 1 à l'infini sur l'axe des "x" et pour les nombres premiers...
Ensuite je prends par exemple un nombre semi-premier donné et je trace la courbe représentative f(x)= nombre semi-premier / x
Par exemple f(x) = 77/x
Je remarque alors que la courbe f(x)=77/x, coupe l'intersection de deux droites sur le graphiques qui correspond au point dont l'abcisse est 7 ou 11 et respectivement les ordonnées 7 et 11, c'est à dire les deux facteurs premiers de 77.
Ma question est de savoir si on peut transcrire cette résolution graphique par une formule qui ferait l'économie de tracer tous les "x" et tous les "y" pour chaque nombres premiers....?
Ma seconde question, est de savoir, si on peut faire un programme qui ferait un graphique où on tracerait ces "x" et ces "y" et ensuite tracer les fonctions f(x) qu'on veut, afin de déterminer graphiquement les deux facteurs premiers du nombre semi-premier...?
Voici le lien vers le graphique, sans doute plus explicite :
" https://fbcdn-sphotos-e-a.akamaihd.net/hphotos-ak-xpf1/v/t1.0-9/10407097_1569461426667526_7669580099287787802_n.jpg?oh=feaa0ff52734535c787716b54601d50e&oe=5592BE40&__gda__=1434152063_b48e894459f5d9867c5625cd72ff5baa " [/url] |
|
Revenir en haut de page |
|
 |
ALS
Inscrit le: 11 Sep 2006 Messages: 647
|
Posté le: 09 Mar 2015 9:51 Sujet du message: |
|
|
Bonjour,
on peut même se passer du graphique grâce à la petite procédure suivante:
Code: |
> semi_prem:=proc(a::posint)
> local x,y,s:
> s:=seq(ithprime(i),i=1..floor(sqrt(a))):
> for y in s do
> for x to y do
> if y=a/x then return(x,y): end if
> end do
> end do:
> end proc:
>
> semi_prem(77);
7, 11
> semi_prem(1013473);
983, 1031
|
Bien à vous. |
|
Revenir en haut de page |
|
 |
Guimzo
Inscrit le: 02 Juin 2012 Messages: 210
|
Posté le: 09 Mar 2015 14:34 Sujet du message: |
|
|
Bonjour ALS,
Merci encore et encore : )
Efficace mais dommage, ça bute encore pour les nombres à plus de 30 digits...
J'perds pas espoir : )
À bientôt et bon après-midi : ) |
|
Revenir en haut de page |
|
 |
|