IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

Résoudre (10a x 10b) + 10a + 10b = n


Sujet :

Algorithmes et structures de données

  1. #41
    Expert confirmé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 330
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 330
    Points : 4 151
    Points
    4 151
    Par défaut
    Bonjour wiwaxia,

    Merci pour ta réponse sur les signes mathématiques. J'espérais quelque chose de plus direct mais en les mettant eux seuls dans un fichier txt et en faisant de copier/coller, ça doit le faire.

    Citation Envoyé par wiwaxia Voir le message
    ...
    Ce qui ne cesse de m'étonner, c'est la réponse quasi instantanée de WolframAlpha (et de quelques autres logiciels) à ce genre de problème:
    factor | 12345678901234567890123456789012345678901234567890123456789012345678901234567890
    Result:
    2×3^2×5×17×73×101×137×3541×3607×3803×27961×1676321×5070721×5882353×5964848081×19721061166646717498359681 (17 prime factors, 16 distinct)
    Il y a aujourd'hui des algo performants (courbes elliptiques, etc.) mais 80 chiffres ne représentent qu'environ 270 bits là où la crypto utilise 1000 ou 2000 bits voire plus si affinité. Par ailleurs, je parie que le parallélisme (voire le multi machine) est mis à contribution pour diviser les temps.

    Salut
    Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better. (Samuel Beckett)

  2. #42
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 947
    Points : 4 058
    Points
    4 058
    Par défaut
    Bonjour à vous tous.

    Pour commencer je tiens à rectifier ce que j'ai écrit au message 38 : il ne semble pas possible de savoir si un nombre est semi-premier sans calculer au préalable ses facteurs.

    Ensuite, je marque cette discussion comme résolue car vous avez apporté une réponse à ma demande initiale.

    Quant à la vitesse de traitement des logiciels disponibles sur internet, qui factorisent 12345678901234567890123456789012345678901234567890123456789012345678901234567890 quasi immédiatement, j'ai aussi été très impressionné, et c'est pourquoi j'ai passé du temps à optimiser mes traitements. Avec les ressources dont je dispose (matériel et langage de programmation), il ressort que :
    - la taille de la base des nombres premiers à tester doit rester faible (664 579 permettent de tester les nombres jusqu'à 10 000 000), car les essais sont chronophages ;
    - au lieu de faire une division sur chacun de ces nombres il est plus rapide de ne tester que le modulo, puis faire la division si le reste vaut zéro. J'ai donc cogité pour cet algorithme, qui peut-être vous intéressera, (à savoir que la fonction MOD du VBA ne supporte pas un diviseur de plus de 9 chiffres) car dans mon cas j'ai toujours un "petit" diviseur et un "grand" dividende:
    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    '---------------------------------------------------------------------------------------
    Public Function ModGNDV(ByVal vcChiffre As String, Diviseur As Variant) As Variant
    '---------------------------------------------------------------------------------------
    While Len(vcChiffre) > 22
        vcChiffre = CStr(ModuloGN(Left(vcChiffre, 22), Diviseur)) & Mid(vcChiffre, 23)
    Wend
    ModGNDV = ModuloGN(vcChiffre, Diviseur)
    End Function
     
    '---------------------------------------------------------------------------------------
    Private Function ModuloGN(vcChiffre As String, Diviseur As Variant) As Variant
    '---------------------------------------------------------------------------------------
    ModuloGN = vcChiffre - (CDec(Diviseur) * Fix(vcChiffre / CDec(Diviseur)))
    End Function
    '---------------------------------------------------------------------------------------

    Au final : j'arrive à factoriser rapidement des nombres jusqu'à 28 caractères (les capacités numériques du VBA), et en temps "raisonnable" des nombres de moins de 45 caractères, au dessus c'est plus long, et à partir de 55 caractères les temps de traitement sont trop longs (il me faudrait plus de ressources mémoire pour le crible quadratique), sauf quand le nombre peut-être en partie factorisé par les premiers de ma base, comme le nombre vu plus haut, qui donne :
    2*3*3*5*17*73*101*137*3541*3607*3803*27961*1676321*5070721*5882353
    Ne reste plus qu'à trouver : 5964848081*19721061166646717498359681.

    Pour finir, et dans un tout autre registre, je recherche des informations sur la méthode pour calculer un logarithme népérien avec une forte précision. Je m'explique :
    en VBA log(341) = 5,83188247728352 soit une précision de 14 chiffres.
    avec une simple calculatrice ln(341) = 5,8318824772835167899911079025075 soit une précision de 31 chiffres.
    Savez-vous comment faire ?

    Merci encore à vous tous pour votre implication.
    Laurent Ott.

  3. #43
    Membre à l'essai
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2021
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Février 2021
    Messages : 9
    Points : 13
    Points
    13
    Par défaut algho
    tu ne pourras pas resoudre l'equation il te manque un element important ta cle de cryptation sinon dans ton alghorythme c'est le resultat avec un decale boeliens en realiter ta cle chiffrer aes mnt pour faire court tu recalcul ton boeenlien decalage tu reviens à ta cle de crypter de depart ici dans mon calcul ta cle sera 10a10b donc ton facteur n

  4. #44
    Expert confirmé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 330
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 330
    Points : 4 151
    Points
    4 151
    Par défaut Div et mod sont dans un bateu
    Bonjour Laurent,

    Citation Envoyé par laurent_ott Voir le message
    ... au lieu de faire une division sur chacun de ces nombres il est plus rapide de ne tester que le modulo, puis faire la division si le reste vaut zéro...
    Navré de te décevoir mais pour un CPU, X64 entre autres, div et mod sont une seule et même opération DIV ou IDIV qui retourne à la fois le résultat de la division et le reste de celle-ci c'est à dire le modulo. C'est pourquoi on trouve souvent une instruction divmod qui habille le code assembleur d'une division et récupère le quotient et le reste. Si VBA t'offre cette possibilité tu n'as pas à hésiter.

    D'un autre coté, même si ton approche ne fait rien gagner, elle n'est pas désastreuse car les quelque divisions économisées par divmod dépendent du nombre de facteurs qui, en crypto, se limite à 2.

    Salut
    Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better. (Samuel Beckett)

  5. #45
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 947
    Points : 4 058
    Points
    4 058
    Par défaut
    Citation Envoyé par Guesset Voir le message
    Navré de te décevoir mais pour un CPU, X64 entre autres, div et mod sont une seule et même opération DIV ou IDIV qui retourne à la fois le résultat de la division et le reste de celle-ci c'est à dire le modulo. C'est pourquoi on trouve souvent une instruction divmod qui habille le code assembleur d'une division et récupère le quotient et le reste. Si VBA t'offre cette possibilité tu n'as pas à hésiter.
    Bonjour Guesset.
    Malheureusement le VBA ne permet pas de traiter des numeriques de plus de 28 caractères. Pour des nombres plus grands il faut ''reprogrammer'' (en chaîne) les opérations de base : addition, soustraction, multiplication, division, modulo, etc (je vous laisse imaginer le boulot que ça représente. Cette programmation ne vient pas de moi, sauf la division, comme déjà indiqué). D'où des temps de traitement plus longs qu'avec des langages qui gèrent nativement les grands nombres. C'est pourquoi je recherche des raccourcis, qui ne concernent effectivement pas tous les langages de programmation : j'aurais dû le préciser.
    J'aurais dû aussi préciser que je cherche à factoriser des entiers, pas forcément semi premiers, donc pas nécessairement un lien avec RSA.
    Merci pour l'intérêt que vous portez à cette discussion.
    Cordialement.

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 3 PremièrePremière 123

Discussions similaires

  1. Bubuntu 8.10b - Disponible !
    Par srvremi dans le forum Bubuntu
    Réponses: 4
    Dernier message: 12/02/2009, 09h34
  2. Bubuntu 8.10b (beta)
    Par srvremi dans le forum Bubuntu
    Réponses: 23
    Dernier message: 01/02/2009, 00h28
  3. Problème "Initramfs " lors de l'installation 8.10a
    Par lucien_jeunesse dans le forum Bubuntu
    Réponses: 1
    Dernier message: 16/01/2009, 22h55
  4. Téléchargement de Bubuntu 8.10a
    Par srvremi dans le forum Bubuntu
    Réponses: 0
    Dernier message: 02/01/2009, 23h06
  5. commande dos pour résoudre une adresse ip
    Par stephy dans le forum Développement
    Réponses: 2
    Dernier message: 17/12/2002, 14h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo