0
votes

sans boucles à somme Plage de nombres impairs

y a-t-il un moyen de faire la somme des nombres impairs de 1 à n mais sans aucune boucle et s'il n'y a pas de moyen, comment puis-je créer cela par un algorithme rapide pour effectuer cette tâche en moins de n boucles.


2 commentaires

Veuillez mettre à jour votre question avec le code que vous avez essayé.


Voir ce stackoverflow.com/q/37126522/3365922


3 Réponses :


0
votes

Essaye ça -

sum(range(1, n+1, 2))


0 commentaires

7
votes

Vous pouvez profiter de la sommation dans une série arithmétique pour additionner les n premiers nombres impairs (pas les nombres impairs de 0 à n )

if n % 2 == 0:
    n = n - 1 # to eliminate the case 10000 and find range 1-9999

Complexité temporelle: O (1), pas de boucle

reference: Sommation d'une série arithmétique

edit: pour adapter la casse pour n pair, par exemple 10000

a = 1 # from 1
n = 9999 # to n
d = 2 # and skip every even number
n = int((n - a) / d + 1) # locate the number of term for n
sum = int((n / 2) * (2 * a + (n - 1) * d))


4 commentaires

Cela devrait être la bonne réponse! J'étais tellement sur l'esprit de programmation que j'ai oublié ce que sont les mathématiques ... 🤦🏽‍♂️


Notez que si n = 2k+1 , le résultat est (k+1)^2 (+1)


Je pense que la question est de trouver la somme des cotes entre 1 et n , donc n peut être pair. Je suggérerais de modifier la réponse en tenant compte de cela.


@MuslimbekAbduganiev Merci pour le rappel!



0
votes

Vous pouvez essayer celui ci-dessous, qui passe de 1 à n, en passant par 2

sum(range(1,n,2))


0 commentaires