0
votes

Trouver le produit du premier million de nombres naturels en python

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 MemoryError . xxx

étapes:

  • i convertis l'objet de la plage en objet de la liste si je dois transmettre une liste comme Argument
  • Maintenant, dans la fonction, j'essaie de diviser le tuple en la convertissant chaîne.
  • Je convertis la chaîne résultante dans une liste puis boucle sur le éléments pour trouver le produit

    Q1: Comment éviter l'erreur de mémoire lorsque j'essaie de trouver le produit du premier million de nombres naturels?

    Q2 Comment améliorer ce code?


5 commentaires

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]: alors


Merci, arg [0] 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) ( Réduire (mul, plage (1, 1000 + 1)) ) mais pour 1000_000 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


4 Réponses :


1
votes

Pour calculer le produit de tous les nombres de 1 à 1 million, utilisez une boucle simple: xxx

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.

EDIT J'aime un peu votre question. Ceci est une fonction qui multiplie les éléments dans une liste: xxx

L'erreur de mémoire est probablement venue du nombre énorme comme @zabiralnazi calculé si bien.


1 commentaires

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.



1
votes

Vous pouvez utiliser un Générateur en Python. XXX < P> Il est plus efficace de mémoire et mieux en termes de performance.


0 commentaires

0
votes

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) xxx

donc, le nombre de chiffres dans votre réponse est 5565703 (env.).

Ce n'est que la finale n , si vous souhaitez également les résultats intermédiaires, il nécessitera une mémoire carrée O (m ^ 2). < PRE> XXX

NB: Vous pouvez approcher des logarithmes et des numéros de stirling avec une période d'exécution plus rapide.


0 commentaires

0
votes

Une solution très simple serait la suivante:

    def prod_of():
        p=1
        for i in range(1,1000000):
            p* = i
        print(p)


0 commentaires