|
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: 11 Nov 2015 20:53 Sujet du message: Fonction RAND et remise à zéro |
|
|
Bonjour ALS : )
En espérant que vous vous portez bien : )
Une aide à vous demander s'il vous plaît pour "perfectionner" un générateur :
===============================
restart;
Digits := 1000; p := 77;
f := proc (x) options operator, arrow; sqrt((floor(sqrt(p*x))+1)^2-p*x) end proc;
a :=2;
b := 1000;
do s := rand(a .. b)();
q := f(s);
m := whattype(q);
if type(q, integer) then print("UNE SOLUTION");
print("TERMINÉ m=", q);
break end if end do;
================================
Ce que je voudrais changer dans le générateur, c'est que Maple n'affiche pas toute la liste à chaque fois des nombres générés avec RAND, jusqu'à trouver une solution, mais que Maple affiche un seul nombre généré, il teste le nombre, si c'est bon, fin du programme et si ce n'est pas bon, il affiche un autre nombre généré et le teste etc...
Mais qu'il n'affiche pas à l'écran l'ensemble des nombres générés à la suite des uns des autres...?
Est-ce possible....? |
|
Revenir en haut de page |
|
|
ALS
Inscrit le: 11 Sep 2006 Messages: 647
|
Posté le: 12 Nov 2015 8:24 Sujet du message: |
|
|
Bonjour,
Pour ne plus avoir l'affichage de chaque nombre généré par rand(a..b) en cours de calcul, il suffit de remplacer le end do; final par end do:
De manière générale, remplacer les points-virgules par : empêche l'affichage du résultat par Maple.
Code: |
> restart;
>
> Digits := 1000: p := 77;
> f := proc (x) options operator, arrow; sqrt((floor(sqrt(p*x))+1)^2-p*x) end proc;
> a :=2;
> b := 1000;
> do s := rand(a .. b)();
> q := f(s);
> m := whattype(q);
> if type(q, integer) then print("UNE SOLUTION");
> print("TERMINÉ m=", q);
> break end if end do:
p := 77
2
f := x -> sqrt((floor(sqrt(p x)) + 1) - p x)
a := 2
b := 1000
"UNE SOLUTION"
"TERMINÉ m=", 12
|
A bientôt. |
|
Revenir en haut de page |
|
|
Guimzo
Inscrit le: 02 Juin 2012 Messages: 209
|
Posté le: 12 Nov 2015 13:57 Sujet du message: Fonction RAND et remise à zéro |
|
|
Bonjour ALS : )
Merci et puis j'espère que ça va,
@bientôt : ) |
|
Revenir en haut de page |
|
|
Guimzo
Inscrit le: 02 Juin 2012 Messages: 209
|
Posté le: 14 Nov 2015 1:09 Sujet du message: Fonction RAND et remise à zéro |
|
|
Bonsoir A.L.S.
Juste une chose par rapport à un programme que vous aviez déjà conçu, basé sur la multiplication scolaire*.
Il est probable que ce soit une solution qui permette de factoriser des grands* nombres semi-premiers.
Voici le programme en question :
==================================
restart;
Digits := 1000;
construit_matrice := proc (N::posint, M::posint, O::posint)
local mat, nb, i, j, reste, div, ligne;
mat := matrix(N+3, 2*N);
nb := M;
for i to length(nb) do reste := `mod`(nb, 10);
mat[N+3, 2*N+1-i] := reste;
nb := (1/10)*nb-(1/10)*reste end do;
div := NULL;
for i in numtheory[divisors](M) do if length(i) = N then div := div, i end if end do;
div := [div];
for ligne to 2 do for i to N do mat[ligne, i] := 0 end do;
for i to N do reste := `mod`(div[ligne], 10);
mat[ligne, N+i] := reste;
div[ligne] := (1/10)*div[ligne]-(1/10)*reste end do end do;
mat[3, 2*N] := O;
j := 0;
for ligne from 3 to 2+N do j := j+1;
for i to N-j do mat[ligne, i] := 0 end do end do;
j := 0;
for ligne from 4 to 2+N do j := j+1;
for i to j do mat[ligne, 2*N+1-i] := 0 end do end do;
evalm(mat) end proc;
construit_matrice(30, 48016772522415711929724469380150677156074222174197370078417, 9)
==================================
Ici je prends comme exemple le nombre semi-premier 48016772522415711929724469380150677156074222174197370078417 qui est composé de 59 chiffres.
Maple renvoie la solution en 11,75 secondes en utilisant 202,27 Mo de mémoire.
Les deux facteurs sont composés chacun de 30 chiffres :
124585414541235852668547587459 et 385412471429574125960256321563
Je pense que si on peut essayer le programme sur un ordinateur assez puissant ( genre double processeur Xéon avec 32 Go de Ram ) on pourrait probablement factoriser les nombres RSA actuels ...!
Ce serait une solution !!!
Voici par exemple le nombre RSA100 que l'on pourrait essayer de factoriser :
1522605027922533360535618378132637429718068114961380688657908494580122963258952897654000350692006139
( Il est composé de 100 chiffres )
Les deux facteurs ont chacun 50 chiffres :
37975227936943673922808872755445627854565536638199 et
40094690950920881030683735292761468389214899724061
Avec mon ordi des années 2007, je peux pas vraiment faire grand chose, mais si on trouve qqn qui possède un pc assez puissant, on pourrait essayer de voir combien de temps cela prendrait pour factoriser le RSA100...
@Bientôt |
|
Revenir en haut de page |
|
|
Guimzo
Inscrit le: 02 Juin 2012 Messages: 209
|
Posté le: 14 Nov 2015 20:58 Sujet du message: Fonction RAND et remise à zéro |
|
|
"Nombre RSA100 factorisé en 35898.39 secondes en utilisant 1380.42 Mo."
Bonjour A.L.S.,
Merci pour ces précisions, comme vous pouvez le voir, je change le message ; le champagne sera pour une prochaine fois : )
Gardons espoir : )
Dernière édition par Guimzo le 17 Nov 2015 14:37; édité 1 fois |
|
Revenir en haut de page |
|
|
ALS
Inscrit le: 11 Sep 2006 Messages: 647
|
Posté le: 15 Nov 2015 9:36 Sujet du message: |
|
|
Bonjour,
Ce qui me gêne, c'est que le programme utilise numtheory[divisors](M) pour trouver des diviseurs de M, et que certainement divisors utilise ifactor dans son déroulement.
Effectivement, voyons comment en listant cette procédure (je mets le paramètre d'environnement verboseproc à 2 pour cela):
Code: |
> interface(verboseproc=2):
> print(numtheory[divisors]);
proc(n::Or(integer, Not(constant)))
local z, j, nf, r, s, u, v;
option remember, `Copyright (c) 1992 by the University of W\
aterloo. All rights reserved.`;
if nargs <> 1 then error "invalid arguments"
elif not type(n, 'integer') then 'procname'(n)
elif n < 8 then
if n < 0 then procname(-n)
else op(n + 1, [{}, {1}, {1, 2}, {1, 3}, {1, 2, 4},
{1, 5}, {1, 2, 3, 6}, {1, 7}])
end if
else
nf := ifactors(n)[2];
r := {1};
for z in nf do
s := {1, seq(z[1]^j, j = 1 .. z[2])};
r := {seq(seq(v*u, v = s), u = r)}
end do;
r
end if
end proc
> print(ifactors);
proc(n)
local f, u;
option `Copyright (c) 1990 by the University of Waterloo. A\
ll rights reserved.`;
if not (type(n, rational) or type(n, facint)) then error
"ifactors takes an integer or a factored integer"
end if;
f := ifactor(n, args[2 .. nargs]);
if member(f, [0, 1, -1]) then return [f, []] end if;
if type(f, '`*`') and op(1, f) = -1 then u := -1; f := -f
else u := 1
end if;
[u, map(proc(x) [op(x[1]), x[2]] end proc,
convert(f, 'multiset'))]
end proc
|
divisors utilise ifactors, qui lui-même utilise ifactor.
Navré de vous décevoir.
Cordialement.
ALS |
|
Revenir en haut de page |
|
|
Guimzo
Inscrit le: 02 Juin 2012 Messages: 209
|
Posté le: 25 Déc 2015 20:05 Sujet du message: |
|
|
Joyeux Noël et bonnes fêtes de fin d'années ALS : ) |
|
Revenir en haut de page |
|
|
ALS
Inscrit le: 11 Sep 2006 Messages: 647
|
Posté le: 26 Déc 2015 10:53 Sujet du message: |
|
|
Merci, j'en profite pour souhaiter de bonnes fêtes de fin d'année à tous les utilisateurs de ce forum. |
|
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.
|