0
votes

Ligne unique pour la boucle

J'essaie de résoudre le problème 7 du projet Euler et c'est le code que j'ai xxx

la ligne xxx

ne "pas" t Travaux. Je suis conscient que ce n'est pas la solution la plus élégante et nécessitera une énorme quantité de temps, mais je me demande comment je peux écrire cette ligne comme une seule ligne et le faire fonctionner.

Cette ligne de code est censé dire diviser le comptoir par chaque nombre plus petit que le compteur. Si une valeur ne donne aucun reste, le compteur n'est pas préféré

BTW Cette question n'a pas vraiment quelque chose à voir avec le problème d'Euler 7. Cela se produit tout simplement que j'essaie de le résoudre et de la penser vous aider à comprendre ce que j'essaie d'atteindre

merci


3 commentaires

codereview.stackexchange.com/q/188053


Regardez dans Compréhensions de liste . Aussi quel est le contre-[...] censé faire?


Peut-être que vous n'avez pas besoin, ou je ne devrais pas vouloir, une seule ligne de construction. Au lieu de cela (alors qu'il est parfois confus), cela peut être un cas pratique pour le pour-ore construction.


5 Réponses :


3
votes

En supposant que vous vouliez le mot comme «si compteur est divisible par n'importe lequel des numéros dans [0, compteur] plage", tout Fonctionne comme un charme: xxx


1 commentaires

Je ne peux pas l'essayer maintenant, mais cela devrait fonctionner avec des parenthèses célibataires ( Les expressions génératrices doivent toujours être écrites à l'intérieur des parenthèses, mais les parenthèses signalant une fonction de fonction comptent également. - de docs.python.org/3/howto/... )



3
votes

au lieu de xxx

Utilisez xxx


l'explication: < p> La liste xxx

est la liste des valeurs true et false - les résultats de la comparaison Compteur% i == 0 pour chaque i .

alors le tout () fonction renvoie vrai , si au moins une valeur de cette liste est true .


0 commentaires

1
votes

On dirait que compteur% [...] code> est destiné à vérifier si un numéro inférieur au nombre de courant divise le nombre actuel. Pour ce faire correctement, vous pouvez itéralement sur chaque numéro à partir de 2 au numéro de courant, vérifiez si chacun divise le nombre actuel, puis vérifiez qu'aucun ( pas code>) des nombres inférieurs divise compteur code>. Vous pouvez le faire en réorganisant votre chèque actuel.

Par exemple: P> xxx pré>

avec prime_count code> comme 10, nous obtenons le résultat suivant pour Primes Code>: P>

[2, 3, 5, 7, 11, 13, 17, 19, 23, 29]


0 commentaires

0
votes

Si vous voulez un test primitif "vraiment" mono-ligne: xxx pré>

  • Tout code> et Tout code> (la fonction suivante de la même page) est utile pour vérifier si tous les éléments / tous les éléments d'un iérent sont true code> li>
  • Les compréhensions de la liste sont bien, mais les générateurs sont plus gentils ici ( page HOWTO connexe ). Une compréhension de liste crée une liste en une étape, si le numéro en question est 1 000 000 code>, il effectue toutes les 998 divisions (voir point suivant). Un générateur génère ses éléments en déplacement, car 1000000 est déjà divisible par 2, tout code> ne posera pas sur les autres divisions 997, et ils ne sont donc pas calculés li>
  • Il suffit d'exécuter un test prime (ou une collection de diviseurs) jusqu'à la racine carrée d'un nombre. Après cela, vous trouverez les mêmes paires de nombres, tout simplement plus lent: si i code> est un diviseur de num code>, puis num / i code> est aussi un diviseur. Et si i code> commence à croître à partir de 2 code>, num / i code> commencera à diminuer à partir de num / 2 code>. Les deux séquences se rencontrent sur la racine carrée de NUM, vous ne pouvez pas trouver un "nouveau" diviseur après. Li> ul>

    Vous pouvez essayer la non-référence suivante (les différences sont si énormes qu'une seule course est correcte ici) pour voir l'effet de ces facteurs: P>

    10001 104743 0.6920690536499023
    10001 104743 3.529352903366089
    10001 104743 110.67006587982178
    10001 104743 1104.40642952919
    


0 commentaires

0
votes

la partie xxx

peut être remplacée par xxx

(pour la fonction tout () le Expression compteur% i se comporte comme compteur% i! = 0 , car valeurs non nul sont considérés true . )


0 commentaires