Начал изучать Python, столкнулся со следующей проблемой.
Условия задачи следующие:
По данному натуральному
n
вычислите сумму1²+2²+3²+...+n²
.
У меня получился такой код, однако он не выводит верные значения. В чем может быть ошибка? Использовать нужно только while
, без использования for / range
:
n = int(input())
i = 0
sum = 0
while i < n:
i = (i + 1)**2
sum = i + n**2
print(sum)
задан 27 янв 2019 в 10:31
2
n = int(input())
i = 1 # начинать с нуля не имеет смысла, т.к. 0^2 = 0
sum = 0
# наш цикл должен работать так же, как и for i in range(1, n+1). Поэтому условие именно такое, а на каждой итерации увеличиваем i на 1
while i <= n:
sum += i**2 # добавляем квадрат этого числа к сумме
i += 1
print(sum)
ответ дан 27 янв 2019 в 10:36
XxXXxX
6733 серебряных знака12 бронзовых знаков
4
Использовать нужно только while
while True:
print( n * (n + 1) * (2*n + 1) / 6 )
break
ответ дан 26 авг 2020 в 0:34
OPTIMUS PRIMEOPTIMUS PRIME
27.1k3 золотых знака22 серебряных знака48 бронзовых знаков
2
x = int(input())
n = 0
y = 0
while n < x:
y = y + (n + 1)**2
n = n + 1
print(y)
ответ дан 25 авг 2020 в 13:02
user404236user404236
651 серебряный знак7 бронзовых знаков
2
Первая ошибка:
В цикле
while i < n:
вы ожидаете, что значения переменной i
будут постепенно 0
, 1
, 2
, … n-1
. Но непосредственно в первой команде цикла
i = (i + 1)**2
переменную i
изменяете.
Нужно использовать другую переменную, например
square = (i + 1)**2
и значение переменной i
поднять как последнюю команду цикла:
i = i + 1 # или i =+ 1
Вторая и третья ошибка:
sum = i + n**2
-
В предыдущей команде вы уже вычислили квадрат очередного числа и присвоили его переменной (теперь уже с именем)
square
. Значит, вместоn**2
нужно использоватьsquare
. -
Вы хотите постепенно прибавлять к переменной
sum
, а неi
. Значит, вместоi
нужно использоватьsum
.sum = sum + square # или sum += square
Ваша программа после применения правок:
n = int(input())
i = 0
sum = 0
while i < n:
square = (i + 1)**2
sum = sum + square # или sum += square
i = i + 1 # или i += 1
print(sum)
ответ дан 25 авг 2020 в 14:26
MarianDMarianD
14.1k3 золотых знака18 серебряных знаков29 бронзовых знаков
0
Без while можно.
a = int(input())
sum = 0
for i in range(1, a + 1):
sum += i ** 2
print(sum)
ответ дан 22 мар 2020 в 15:59
1
In this tutorial, you will learn how to create a program to calculate the sum of squares of first N natural numbers. To execute this program, we will be using the concept of loops in Python. You must know this concept before moving further.
For a positive integer N, the task is to find the value of,
1² + 2² + 3² + 4².....+ N²
The program should accept the following input, look at the sample input and output below,
Input– enter n: 13
Output– sum of square of first 13 natural numbers: 819
For executing this task, we can follow two approaches:
- Using loops
- Using formula
Approach 1: Using loops
In this approach, we will use the concept of loops to find the squares of the first n numbers and we will keep on adding the numbers to get the final sum.
Algorithm
Step 1– Define a function to find the sum of squares
Step 2– Declare a variable that will store the sum
Step 3– Define a loop that will run n times
Step 4– Inside the loop update the value of the variable which will store the sum of squares
Step 5– Calculate the square of each number before adding it to the sum
Step 6- Return the value of s
Step 7- Take input of n from the user
Step 8- Pass the input as a parameter in the function
Step 9– Display the result returned by the function
Python Program 1
Look at the complete program given below to understand the implementation of the approach.
def SumofSquares(n):
s=0
for i in range(n+1):
s+=i**2
return s
#input
n=int(input("enter n: "))
print("sum of squares of first {} natural numbers: ".format(n),SumofSquares(n))
enter n: 20
sum of squares of first 20 natural numbers: 2870
The operator ** is used to calculate exponents, i**2 is the same as i²
The format() is a function for handling strings that permits you to do variable substitutions and data formatting. Here, we have used this function to print the value of n in place of {} in the print statement.
Approach 2: Using Formula
In mathematics, there is a formula to calculate the sum of squares of first n numbers. We can directly put this formula to calculate our result. This will eliminate the need for a loop in our program.
sum of squares of first n natural numbers = (n*(n+1)*(2n+1))/6
Algorithm
Step 1- Define a function to calculate the sum of squares
Step 2- Use the formula mentioned above to calculate the sum of squares of n natural numbers
Step 3– Return the value calculated above
Step 4– Take input of n from the user
Step 5– Call the function to display the result
Python Program 2
Look at the complete program given below to understand the implementation of the approach.
def SquareSum(n) :
return (n * (n + 1) * (2 * n + 1)) // 6
n=int(input("enter N: "))
print("Sum of squares of first {} natural numbers: ".format(n),SquareSum(n))
enter N: 10
Sum of squares of first 10 natural numbers: 385
The format() function is used in the same way as mentioned above to display the value of n in place of {} in the print statement.
Conclusion
In this tutorial, we have learned two ways by which we can calculate the sum of the squares of the first N natural numbers. One is by using a loop that will calculate the squares of N numbers and add them up to give the final result. Second, we can directly use the formula to get the value of the sum of the squares of N natural numbers.
0 / 0 / 0 Регистрация: 10.02.2021 Сообщений: 10 |
|
1 |
|
01.03.2021, 07:16. Показов 12016. Ответов 11
Найти сумму квадратов чисел от m до n.
0 |
NoBodys 1 / 1 / 0 Регистрация: 07.11.2019 Сообщений: 168 |
||||
01.03.2021, 07:35 |
2 |
|||
0 |
628 / 468 / 179 Регистрация: 28.05.2012 Сообщений: 1,399 |
|
01.03.2021, 07:39 |
3 |
NoBodys,
0 |
0 / 0 / 0 Регистрация: 10.02.2021 Сообщений: 10 |
|
01.03.2021, 07:41 [ТС] |
4 |
Traceback (most recent call last):
0 |
628 / 468 / 179 Регистрация: 28.05.2012 Сообщений: 1,399 |
|
01.03.2021, 07:44 |
5 |
nohcho_borz95, М. Лутц вам в помощь
0 |
Am I evil? Yes, I am! 15823 / 8956 / 2596 Регистрация: 21.10.2017 Сообщений: 20,638 |
|
01.03.2021, 08:01 |
6 |
NoBodys, сумму квадратов
0 |
628 / 468 / 179 Регистрация: 28.05.2012 Сообщений: 1,399 |
|
01.03.2021, 08:03 |
7 |
iSmokeJC, он ещё и sum использовал…
1 |
iSmokeJC Am I evil? Yes, I am! 15823 / 8956 / 2596 Регистрация: 21.10.2017 Сообщений: 20,638 |
||||
01.03.2021, 08:09 |
8 |
|||
0 |
Arsegg 3478 / 2086 / 559 Регистрация: 02.09.2015 Сообщений: 5,332 |
||||
01.03.2021, 10:50 |
9 |
|||
1 |
Semen-Semenich 4466 / 3146 / 1112 Регистрация: 21.03.2016 Сообщений: 7,832 |
||||||||
01.03.2021, 18:47 |
10 |
|||||||
iSmokeJC, рекурсия вещь хорошая но не всегда
RecursionError: maximum recursion depth exceeded in comparison
2 |
Am I evil? Yes, I am! 15823 / 8956 / 2596 Регистрация: 21.10.2017 Сообщений: 20,638 |
|
01.03.2021, 19:00 |
11 |
Semen-Semenich, безусловно!
0 |
Welemir1 |
01.03.2021, 19:02
|
Не по теме:
но не всегда и не в питоне)
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
01.03.2021, 19:02 |
Найти сумму, произведение, сумму квадратов и сумму корней 2 чисел Дано n чисел. Найти их сумму, сумму квадратов и квадрат суммы Дан массив целых чисел Х. Найти сумму квадратов всех чисел Задан массив из пяти целых чисел, найти сумму квадратов этих чисел Задана последовательность действительных чисел. Найти сумму квадратов чисел, значение которых принадлежит промежутку [a, b] Найти сумму квадратов чисел от A до B Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 12 |
Дано положительное целое число N. Задача состоит в том, чтобы найти 12 + 22 + 32 + ….. + N2.
Примеры:
Input : N = 4
Output : 30
12 + 22 + 32 + 42
= 1 + 4 + 9 + 16
= 30
Input : N = 5
Output : 55
Способ 1: O(N)
Идея состоит в том, чтобы запустить цикл от 1 до n, и для каждого i, 1 <= i2 суммировать.
# Python3 Program to
# find sum of square
# of first n natural
# numbers
# Return the sum of
# square of first n
# natural numbers
def squaresum(n) :
# Iterate i from 1
# and n finding
# square of i and
# add to sum.
sm = 0
for i in range(1, n+1) :
sm = sm + (i * i)
return sm
# Driven Program
n = 4
print(squaresum(n))
# This code is contributed by Nikita Tiwari.*/
Выход:
30
Метод 2: O(1)
Доказательство:
Мы знаем,
(k + 1)3 = k3 + 3 * k2 + 3 * k + 1
Мы можем записать вышеуказанный идентификатор для k от 1 до n:
23 = 13 + 3 * 12 + 3 * 1 + 1 ......... (1)
33 = 23 + 3 * 22 + 3 * 2 + 1 ......... (2)
43 = 33 + 3 * 32 + 3 * 3 + 1 ......... (3)
53 = 43 + 3 * 42 + 3 * 4 + 1 ......... (4)
...
n3 = (n - 1)3 + 3 * (n - 1)2 + 3 * (n - 1) + 1 ......... (n - 1)
(n + 1)3 = n3 + 3 * n2 + 3 * n + 1 ......... (n)
Подставляя уравнения (N - 1) в уравнении Н
(П + 1)3 = (Н - 1)3 + 3 * (П - 1)2 + 3 * (П - 1) + 1 + 3 * н2 + 3 * П + 1
= (Н - 1)3 + 3 * (П2 + (п - 1)2) + 3 * ( n + (n - 1) ) + 1 + 1
Поставив все уравнения, получим
(П + 1)3 = 13 + 3 * Σ к2 + 3 * Σ к + Σ 1
н3 + 3 * н2 + 3 * П + 1 = 1 + 3 * Σ к2 + 3 * (п * (п + 1))/2 + п
н3 + 3 * н2 + 3 * н = 3 * K и Σ2 + 3 * (п * (п + 1))/2 + п
н3 + 3 * н2 + 2 * п - 3 * (п * (п + 1))/2 = 3 * Σ к.2
n * (n2 + 3 * n + 2) - 3 * (n * (n + 1))/2 = 3 * Σ k2
n * (n + 1) * (n + 2) - 3 * (n * (n + 1))/2 = 3 * Σ k2
n * (n + 1) * (n + 2 - 3/2) = 3 * Σ k2
n * (n + 1) * (2 * n + 1)/2 = 3 * Σ k2
n * (n + 1) * (2 * n + 1)/6 = Σ k2
# Python3 Program to
# find sum of square
# of first n natural
# numbers
# Return the sum of
# square of first n
# natural numbers
def squaresum(n) :
return (n * (n + 1) * (2 * n + 1)) // 6
# Driven Program
n = 4
print(squaresum(n))
#This code is contributed by Nikita Tiwari.
Выход:
30
Избегая раннего переполнения:
Для большого числа n значение (n * (n + 1) * (2 * n + 1)) будет переполнено. Мы можем до некоторой степени избежать переполнения, используя тот факт, что n*(n+1) должно быть кратно 2.
# Python Program to find sum of square of first
# n natural numbers. This program avoids
# overflow upto some extent for large value
# of n.y
def squaresum(n):
return (n * (n + 1) / 2) * (2 * n + 1) / 3
# main()
n = 4
print(squaresum(n));
# Code Contributed by Mohit Gupta_OMG <(0_o)>
Выход:
30
Самая короткая программа для печати суммы квадратов введённых чисел (печатается только сумма квадратов, а сами числа или их квадраты не сохраняются для дальнейшей обработки) :
print(“сумма квадратов =”,sum([int(input(“число “+str(i+1)+”=”))**2 for i in range(10)]))
Ввод с клавиатуры в список можно сделать генератором, а потом массив чисел обработать функцией map, указав функцию обработки возведение в квадрат.
При этом список введённых чисел сохраняется.
a=[int(input(“число “+str(i+1)+” = “)) for i in range(10)]
print(“сумма квадратов равна”,sum(map(lambda x:x**2,a)))
Можно сделать ввод с клавиатуры в список квадратов генератором, а потом массив квадратов чисел суммировать функцией sum
При этом сохраняется список квадратов введённых чисел.
a=[int(input(“число “+str(i+1)+” = “))**2 for i in range(10)]
print(“сумма квадратов равна”,sum(a))
Если требуется сохранить и вывести только сумму квадратов, не сохраняя никаких введённых чисел, то можно суммировать при вводе чисел:
s=0
for i in range(10):
____s=s+int(input(”число “+str(i+1)+”=”))**2
print(“сумма квадратов равна “,s)
Пример работы будет одинаковым для всех приведённых программ: