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 

Fonction RAND et remise à zéro

 
Poster un nouveau sujet   Répondre au sujet    Apprendre Maple Index du Forum -> Programmation
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
Guimzo



Inscrit le: 02 Juin 2012
Messages: 209

MessagePosté le: 11 Nov 2015 20:53    Sujet du message: Fonction RAND et remise à zéro Répondre en citant

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
Voir le profil de l'utilisateur Envoyer un message privé
ALS



Inscrit le: 11 Sep 2006
Messages: 647

MessagePosté le: 12 Nov 2015 8:24    Sujet du message: Répondre en citant

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
Voir le profil de l'utilisateur Envoyer un message privé
Guimzo



Inscrit le: 02 Juin 2012
Messages: 209

MessagePosté le: 12 Nov 2015 13:57    Sujet du message: Fonction RAND et remise à zéro Répondre en citant

Bonjour ALS : )
Merci et puis j'espère que ça va,
@bientôt : )
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: 14 Nov 2015 1:09    Sujet du message: Fonction RAND et remise à zéro Répondre en citant

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
Voir le profil de l'utilisateur Envoyer un message privé
Guimzo



Inscrit le: 02 Juin 2012
Messages: 209

MessagePosté le: 14 Nov 2015 20:58    Sujet du message: Fonction RAND et remise à zéro Répondre en citant

"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
Voir le profil de l'utilisateur Envoyer un message privé
ALS



Inscrit le: 11 Sep 2006
Messages: 647

MessagePosté le: 15 Nov 2015 9:36    Sujet du message: Répondre en citant

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
Voir le profil de l'utilisateur Envoyer un message privé
Guimzo



Inscrit le: 02 Juin 2012
Messages: 209

MessagePosté le: 25 Déc 2015 20:05    Sujet du message: Répondre en citant

Joyeux Noël et bonnes fêtes de fin d'années ALS : )
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: 26 Déc 2015 10:53    Sujet du message: Répondre en citant

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
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 -> Programmation 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.