Division en Python
Comment puis-je faire pour savoir si la division suivante est un entier sur le langage Python.
Merci
24851019416975905487621263710649527109156864 / 211
Je sais que c'est entier théoriquement.Merci
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
je ne sais plus s'il y a une blagounette pour les versions 2.x mais pour 3.y voir ci-dessous.
S
a=3
b=2
print(a//b)
Le quotient de la division euclidienne de a par b est alors renvoyé.
Référence : voir wiki par exemple.
24851019416975905487621263710649527109156864%211
Et on trouve alors le reste : 78. Donc, la fraction n'est pas un entier.
Je trouve que cette question serait un bon exercice d'algorithmique (et on pourra aussi écrire le code) sachant que les entiers sont codés sur 32 bits.
Tu sais, quand j'ai appris a faire des calculs, je travaillais avec une table de log à 5 décimale.
Puis j'ai utilisé des machines pour faire des calculs, alors cette préoccupation de précision liée plus à la méthode qu'au nombre des chiffres est restée dans ma tête.
Je ne connais pas "entiers longs", je ne connais que les "long" sur 32 bits.
Mais je me doutais qu'on me dirait cela, c'est pourquoi j'ai écrit "sachant que les entiers sont codés sur 32 bits".
On a tellement de logiciels qu'on les met en "tas" ? (:D
Et comment codes-tu l'entier 24851019416975905487621263710649527109156864, sujet de ce fil, sur 32 bits ?
Donc, si tu veux manipuler ce type d'entiers, ou bien tu utilises un langage qui le fait (par exemple python, dont il est question ici), ou bien tu réinventes la roue dans ton coin à titre d'exercice. On s'amuse comme on peut et comme on veut.
PS : Bouvard et Bouvart, ou Dupond et Dupont chez Flaubert.
Concernant le très grand nombre, il est vrai que je ne vois pas très bien l'intérêt de faire ce type de calcul, sauf dans le cadre d'un exercice.
Comme j'ai passé l'age de faire des exercices, je me contente d'en proposer.
-- Schnoebelen, Philippe
De grands nombres ? tu connais le cryptage par RSA ?
Il ne faut pas oublier les deux dernières opérations, très utiles.
Ici % devrait faire ton bonheur. Comme dit plus haut, si le reste est nul c'est que la division tombe pile, sinon c'est que le rapport n'est pas entier.
Et ** est la puissance.
-- Schnoebelen, Philippe
n := (5* * 209 -1)/3, la variable (n) s´affiche sous forme d'une exponentielle, alors que la démarche nécessite des valeurs entières pour vérifier une formule que j'ai développée.
Si quelqu'un peut m'aider à savoir comment faire des calculs avec des entiers très très grands, disons n := 5* * 2015.
Ou me proposer des logiciels qui peuvent le faire.
Merci.
Je vais essayer de faire une réponse humoristique.
Question : le nombre 452873 est-il divisible par 13 ?
Réponse : il suffit de prendre une bonne calculette.
Les nombres très grands nécessitent des méthodes particulières. Il y a effectivement des logiciels qui font cela.
Réponse à votre question : il suffit de trouver le bon logiciel.
Par ailleurs je lis dans la documentation de Sage (logiciel de calcul formel libre et gratuit écrit en Python) :
"Entiers longs : Python possède nativement un support pour les entiers de précision arbitraire, en plus des int du langage C. Les entiers longs Python sont significativement plus lents que ceux que GMP fournit et sont marqués à l’affichage par un L qui les distingue des int (il est pas prévu de changer cela à court terme). Sage implémente les entiers en précision arbitraire en utilisant la bibliothèque C GMP. Les entiers longs GMP utilisés par Sage s’affichent sans le L."
-- Schnoebelen, Philippe
À noter :
Et effectivement (noter la différence entre les deux divisions en Python 3) :
Cordialement,
Ritchie
26580230152030080186694932540218726488827831246049159596690347990412258463764243
81648174667602474328938465602776322973826966645010982768653894894660804149432709
20124582223428907705966900326825678956865348570933446979706942662689923504048713
42207948999744545817611204448413364099358326998424771947809320433011204059364529
89716847366566698294002344654744338498883089986442769975710540358297791986724049
63345564382070071749413665563057454561603304027156858738250927488358054228273518
94490916879426785680015734169999521460578444605407294694052499336546712868092232
34317367733759814665490115078492978972379262502788779746851496573403612680901083
72674485319229953648403143807921495350639733918732902632155324641630692574104441
58486805585584237471377931316990278931534988145339851899014248243231639296927656
57832110734378382433443475846141853966177666618327664649856132047217341758640347
01109494679383368132542791914092128614054658561640568320311010267764771154480588
76577727147166932227152889955726770431111559874617472922473303890796009007639921
96726156005520701090013227239824874920236595854933990496210576821875508890583621
74192946108811475743582125643401334913027090164832779556762422622243042176522601
77242465224109217008717223270706742939597042562371505937984039846752485108313294
61678449470640692202002020916341068665992971052679913085272470934865260389859689
7866288442380255929720078711397945880889892578125
avec Pyzo (Python 3.4.1 sur Windows 7)
Cordialement
Rescassol
peux tu faire cette division 5* * 2015 % 5 ,
Ou alors vous pouvez le faire "à la main". Est-ce que $5$ est un diviseur de $ 5^{2015}$ ?
-- Schnoebelen, Philippe
Je voudrais savoir comment installer python sur linux
merci.
Par exemple: Pyzo et suivre les instructions.
Cordialement,
Rescassol
Sinon, cherche les paquets tous prêts pour ta distribution, pas besoin d’aller chercher un truc sur un site.
-- Schnoebelen, Philippe
Considère un nombre à quatre chiffres: exemple 5138, 9998, 1028, 1111, etc. Suppose que tu
regardes le nombre M = 5138. Tu peux prendre les quatre chiffres de M et réarranger ces chiffres
de M pour obtenir le plus grand nombre possible que l’on puisse faire avec ces chiffres, Mbig = 8531; aussi
Tu peux réarranger pour avoir le plus petit nombre possible Msmall = 1358. Écris une fonction qui
fait ce genre de calcul.
quelqu'un a-t-il la méthode pour décomposer des très grands nombres ? Une division euclidienne classique (flottants vs entiers) convergera-t-elle ?
Merci....
A priori, il n’existe pas d’algorithme efficace pour décomposer les entiers en produit de nombres premiers.
-- Schnoebelen, Philippe
Par exemple:
Cordialement,
Rescassol
J'ai une deuxième question. J'essaie de créer la paire clé publique / clé privée de cette manière préconisée pour le déchiffrement:
- 1. on choisit deux nombres premiers p et q
- 2. le produit p*q donne alors le module n
- 3. on calcule z=(p-1)(q-1)
- 4. on choisit un nombre e premier avec z (on prend généralement e premier, mais il faut bien vérifier qu’il soit premier avec z)
- 5. on calcule d, inverse de e modulo z, c’est à dire le nombre inférieur à z tel que le reste de la division de e×d par z soit égal à 1
Peut-on avoir une méthode simple pour 4 et 5 ?
Merci....
Merci du retour
Oh, un RSA. :-D
4- Tu choisis un nombre au hasard entre des bornes que tu te donnes, ensuite tu utilises nextprime.
5- Ça ressemble fortement à un algorithme d’Euclide généralisé (Bézout, quoi).
-- Schnoebelen, Philippe
Quel rapport avec l'égalité : (d*e) mod Z = 1 où d est la clé à calculer et Bézout ou Euclide étendu ? Ci-dessous deux exemples d'implémentation.
Existe-t-il un décodeur RSA des grands nombres car mon programme parvient à des dépassements de taille de pile et n'aboutit pas en calculs ?
J'ai modifié mon code avec l'indication d'une fonction permettant le calcul de d. Il me manquait une fonction de librairie adaptée à Python v3.8.2.
Merci et à bientôt....