К основному контенту

Задача №6 Разность между суммой квадратов и квадратом суммы

Условие задачи:
Сумма квадратов первых десяти натуральных чисел

12 + 22 + ... + 102 = 385

Квадрат суммы первых десяти натуральных чисел

(1 + 2 + ... + 10)2 = 552 = 3025

Следовательно, разность между суммой квадратов и квадратом суммы первых десяти натуральных чисел составляет 3025 − 385 = 2640.
Найдите разность между суммой квадратов и квадратом суммы первых ста натуральных чисел.

Решение:
Для оптимизации будем использовать формулу квадрата суммы из школьной арифметики:
(a+b) 2=a 2+2ab+b 2

А Другими словами квадрат суммы = сумма квадратов +2*попарное умножение каждого из агрументов.
Реализация на Python:
r=range(1,n+1)
for i in r:
s1+=(i**2) #Прибавляем квадрат числа к сумме for j in r[ind+1:]: s1+=2*i*j #Умножаем число ка последующие аргументы списка
Вышло все достаточно быстро:

def sq_sum(n): s1=0 s2=0 ind=0 r=range(1,n+1) for i in r: s1+=(i**2) s2+=(i**2) for j in r[ind+1:]: s1+=2*i*j ind+=1 return s1-s2 print(sq_sum(100))

Может выглядит не особо красиво (буду учить функциональное программирование) но достаточно просто, понятно и быстро. S2 - хранит сумму квадратов, s1 - квадрат числа.

Популярные сообщения из этого блога

Задача №3 Наибольший простой делитель

Условие задачи Простые делители числа 13195 - это 5, 7, 13 и 29. Каков самый большой делитель числа 600851475143, являющийся простым числом? Решение Простым числом, является натуральное число больше единицы, которое имеет 2 делителя - 1 и само себя.  Для начала найдем все простые делители необходимого числа.  Чтобы сократить поиск будем перебирать до квадратного корня  600851475143 округленного вверх  ( функцией  math.ceil) Перебор будем вести начиная с числа 3. Если i делит число на цело, рекурсивно обращаемся к функции issimple c аргументом i. Функция issimple возвращает пустой список если число является простым. В этом случае число попадает в результирующий список Далее остается только вернуть максимальное значение массива простых чисел, которые нацело делят число 600851475143  Код Python import math def issimple(a): r=math.ceil(math.sqrt(a)) lst=[] for i in range(3,r): if a%i==0: if issimple(i)==[]: lst.app

Задача №1 Сумма чисел, кратных 3 м и 5-ти

 . Задача №1 Если выписать все натуральные числа меньше 10, кратные 3 или 5, то получим 3, 5, 6 и 9. Сумма этих чисел - 23. Найдите сумму всех чисел меньше 1000, кратных 3 или 5. Решение

Задача 21. Дружественные числа

Пусть d( n ) определяется как сумма делителей  n  (числа меньше  n , делящие  n  нацело). Если d( a ) =  b  и d( b ) =  a , где  a  ≠  b , то  a  и  b  называются дружественной парой, а каждое из чисел  a  и  b  - дружественным числом. Например, делителями числа 220 являются 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 и 110, поэтому d(220) = 284. Делители 284 - 1, 2, 4, 71, 142, поэтому d(284) = 220. Подсчитайте сумму всех дружественных чисел меньше 10000. Решение Для начала определим функцию, которая будет возвращать сумму делителей числа: def get_sum(n):     s=0     for i in range(1,n):         if n%i==0:             s+=i     return s Думаю не требует объяснений все довольно тривиально Далее определяем функцию, возвращающую список дружественных чисел до числа n:   def gen_friendlys(n):     res=[]     for i in range(1,n):         if i not in res:             tmp=get_sum(i)             if i==get_sum(tmp) and i!=tmp:                 res.append(i)                 res.