Je viens de commencer avec la langue de programmation Python. J'ai essayé d'écrire une fonction qui prend une liste ou plusieurs entiers pour trouver leur produit. J'essaie de trouver le produit du premier million de nombres naturels, mais son affichage d'un étapes: p> Q1: strong> Comment éviter l'erreur de mémoire lorsque j'essaie de trouver le produit du premier million de nombres naturels? P> MemoryError code>.
4 Réponses :
Pour calculer le produit de tous les nombres de 1 à 1 million, utilisez une boucle simple: mais gardez à l'esprit que le résultat sera un très grand nombre.
Cela signifie que votre calcul peut prendre longtemps et le nombre résultant nécessitera une mémoire beaucoup. P> EDIT STRUT> J'aime un peu votre question. Ceci est une fonction qui multiplie les éléments dans une liste: p> L'erreur de mémoire est probablement venue du nombre énorme comme @zabiralnazi calculé si bien. P> p >
Merci. Mais j'essayais de créer une fonction où je saisis une liste de chiffres et d'obtenir le produit. J'ai mentionné le premier million de numéros parce que lors du test de ma fonction, il a montré une erreur de mémoire.
Vous pouvez utiliser un Générateur en Python.
Toute la solution va bien, mais un point à faire - votre question est équivalente à trouver le factoriel de 1 million.
Nombre de chiffres de N! = log10 (1) + log10 (2) + ... log10 (n) p> donc, le nombre de chiffres dans votre réponse est Ce n'est que la finale NB: Vous pouvez approcher des logarithmes et des numéros de stirling avec une période d'exécution plus rapide. P> P> 5565703 code > (env.). p>
n code>, si vous souhaitez également les résultats intermédiaires, il nécessitera une mémoire carrée O (m ^ 2). P> < PRE> XXX PRE>
Une solution très simple serait la suivante:
def prod_of(): p=1 for i in range(1,1000000): p* = i print(p)
Pourquoi sur Terre convertissez-vous votre tuple en une ficelle et de retour au lieu de simplement iterrer directement comme vous le faites dans la déclaration d'autre?
En passant l'argument ARG, il est converti en une seule tuple electroné.
essayez
pour i in arg [0]: code> alors
Merci,
arg [0] code> fonctionne d'une manière que je puisse directement en boucher. Mais le problème concernant la recherche du produit de millions de chiffres est toujours là.
Pour les nombres plus petits:
math.Factorial (1000) code> (
Réduire (mul, plage (1, 1000 + 1)) code>) mais pour
1000_000 code> le La réponse est trop grande: vous pouvez Utilisez la formule STRIling pour estimer le journal de la réponse:
n * journal (n) -n code>