Задачки, история о Карле Гауссе и сумма цифр всех чисел от 1 до 1 000 000 В главное роли - Джеймс Грайм singingbanana.com/ Оригинал тут: • One to One Million - N...
комменты напомнили анекдот: Физику, математику и инженеру дали задание вычислить объем красного резинового мячика. Физик погрузил мяч в стакан с водой и измерил объем вытесненной жидкости. Математик измерил диаметр мяча и рассчитал тройной интеграл. Инженер достал из стола «Таблицу объемов красных резиновых мячей» и нашел нужное значение.
не хочу быть занудой, но какой там тройной интеграл? Зная диаметр резинового мячика, можно воспользоваться простой формулой поиска объема шара, где присутствует куб, но уж точно никакого интеграла %)
ну и что? через тройной интеграл объём шара измеряется точно так же легко тут всё дело в другом... как то мне, ещё когда я училась в универе, соседка притащила задачку, мол, никак решить не мог её второклассник. саму задачу я уже не помню, но там было чёт простенькое, я быстро накидала решение через систему двухлинейных уровнений с двумя неизвестными и решила, соседка оттащила это дитю, дитё почесало в затылке. сказало что они такого ещё не проходили. тут уже я почесала в затылке, а как это можно решить ЕЩЁ примитивнее. оказалось, что это была "задача на смекалку" и ответ нужно было подобрать :)
А я сразу все понял. Нашёл ответ в течение 5 секунд после вопроса. 5 секунд ушли на прокрутку вперёд. Мой метод показал свою эффективность. Теперь думаю патентовать.
а я прикинул, что количество используемых цифр одинаковое среди чисел чисел от 000000 до 999999 - за счет симметричности задачи(цифра 1 не имеет никаких отличий от цифры 2 и.т.д) поскольку всего цифр 10, а всего использовано цифр 6*1000000=6000000, то каждая цифра встречается 600000 раз. таким образом сумма цифр равна 600000*(0+1+2+3+4+5+6+7+8+9)=27000000. и еще число 1000000, то есть в итоге 27000001.
gopher Я решил точно так же, это как бы комбинаторный алгоритм, люблю этот метод, этот метод по моему более прост и универсален, но и метод в видео интереснее ))
Я тоже слышал историю, что Гаусс занимался всякой фигней, пушки Гаусса изобретал на уроках и учитель задолбался его охлаждать, придумывая раз за разом задачки вроде подобных.
Классическая история о гениальном ученике и его разочарованном учителе! Похоже, что молниеносные решения Гауссом математических задач вызывали напряжение в классе. Пытаясь "остудить его", учитель предложил юному Гауссу особенно трудную задачу, надеясь замедлить его. Но, как мы все знаем, Гаусса было не остановить. Он с легкостью решил задачу и стал одним из самых известных математиков в истории. Таким образом, похоже, что попытка учителя "остудить его" только подогрела страсть Гаусса к математике и закрепила его место в анналах истории математики.
Можно же было проще решить. Я пишу этот комментарий в 11:16, 11.06.2018. Складываем часы - 11+16=27. Умножаем на миллион, так как нужно узнать суммы чисел до миллиона - 27*1000000 = 27000000. Прибавляем единицу, потому что а почему бы и нет? И вуа-ля: 27000001.
Можно по другому, я пишу этот комментарий в 12:15, 29.09.2018. Складываю часы - 12+15 = 27. Умножаю на 1 млн. = получаю 27 000 000, и складываю с единицей. Опа-на = 27 000 001.
Я, как обычный программист, увидел задачку и решил проверить. Эту задачу легко реализовать на Python. К тому, я задействовал встроенную библиотеку time, чтобы ради прикола сосчитать время выполнения кода. Вот, собственно, сам код: import time temp = time.time() summa = 0 for i in range(1, 1000001): for j in str(i): summa += int(j) print(time.time() - temp) print(summa) В первой строчке мы импортируем модуль time. Во второй - присваиваем переменной temp текущее время. В третьей - вводим новую переменную summa. Позже там будет хранится информация о сумме В 4-6 строчке идет цикл с вложенным циклом. В четвёртой строке пробегаемся по каждому числу с 1 до миллиону. В пятой же мы пробегаемся по каждому из них и прибавляем к sum. Затем мы отнимаем текущее время от времени temp. Потом с помощью print, всё это выводим. Я сижу с телефона (!), и консоль вывела следующее: 4.56493353843689 27000001 Невероятно, вычисления всего лишь за 4,565 секунд. К тому же, мы можем задать левую и правую границы нашего кода. С отрицательными надо додумать (хотя в условиях все равно будут только натуральные) 2) Без таймера: summa = 0 for i in range(1, 1000001): for j in str(i): summa += int(j) print(summa) 3) Для тех, которые любят строковые выражения и однострочечные коды: print(sum([sum(int(i) for i in list(str(j))) for j in range(1, 1000001)]))
0:55 Другое решение - 45*10^5*6+1=27000001, по формуле поразрядного нахождения суммы цифр чисел от 1 до 10^n - 45*10^(n-1)*n+1. Как находим такую формулу? Сначала посчитаем 0+1+2+3+4+5+6+7+8+9. Будет 45. Известно, что при перечислении всех чисел цифры чередуются. Цикл идёт по кругу. Значит, для чисел от 1 до 99 справедливо, что в каждом разряде каждая цифра по 10 раз повторяется, т. е. будет результат 45*10*2. В ряду от 1 до 999 цифры в каждом разряде повторяются уже по 100 раз, и их сумма будет 45*100*3. Если затронем число 1000, то тут сумма увеличится только на 1. Соответственно, в ряду от 1 до 10000 сумма цифр будет 45*1000*4+1, от 1 до 100000 - 45*10000*5+1. Исходя из этого, для ряда чисел от 1 до 10^n общая сумма цифр будет равна 45*10^(n-1)*n+1. Значит, для ряда чисел от 1 до 1000000, т. е. до 10^6, общая сумма цифр будет равна 45*10^5*6+1=27000001. В принципе, 45*10^(n-1)*n+1=9*n*10^n/2+1
тоже пришëл к этому решению, только не смог дошëл до 10^(n-1). только у меня возникает вопрос, как посчитать сумму цифр от 1 до 19487, к примеру? ведь тут уже нельзя прийти к 9 в каждом разряде
О, я верно посчитал.... (Pascal) var i,a,i2,c:integer; b:string; begin for i:=1 to 1000000 do begin b:=inttostr(i); for i2:=1 to length(b) do c:=c+strtoint(b[i2]); end; writeln(c); end.
Получил то же самое статистикой. От 000001 до 999999 на каждой позиции из 6-и все цифры появляются с равной частотой. Если взять одну любую позицию, например, первую, то там будет одинаковое число цифр 0,1,2,3,4,5,6,7,8 и 9. Каждая - по 100 000 раз пооучается. Сумма 0+1+2+...+9 = 45. 45*100 000 = 4 500 000. Позиций всего 6. 6 * 4 500 000 = 27 000 000. Ну и поюс 1 в конце
в 7м классе я неделю думал как эту задачу решить,но решил,тогда еще не было интернета и компа,я был так счастлив))) только 2 человека из класса решили ее)))
Перед просмотром написал программу, которая делает это вычисление (втупую, без метода Гаусса). Всё сошлось, значит метод Гаусса действительно работает даже в таком виде)
#include using namespace std; int sum(int x) { int y=0; while (x>=10) { y+=x%10; x/=10; } y+=x; return y; } int main() { int f; int cc; long long ss=0; cin>>cc; for(int i=1;i
Важное уточнение для понимания, которое упущено в видео. Когда ты так складываешь, то нигде не перегружается разряд. Всегда, в каждом разряде, цифра дополняется ровно до 9. Например, 236752 складывается с 763247 и все значения цифр сохраняются.
Поясняю для нубов ))) Разряд это количество цифр в числе. Один разряд имеет значение от 0 до 9 (в десятичной системе). Т.е. если мы складываем 98+1=99 , а если 99+1=100 уже разрядность меняется.
тут не важно до скольки дополняется цифра. главное получить одинаковые пары. а потом посчитать количество пар. в числе количество цифр может увеличиться хоть в 10 раз главное чтоб все пары были одинаковыми и мы знали их количество.
Ну если не важно, то почему меняется сумма цифр с 54 на 2, если складывать не с нуля а с единицы т.е. (для наглядности) 0+999999 и сумма цифр равна 0+9+9+9+9+9+9=54, теперь начинаем складывать с единицы: 1+1000000, сумма цифр равна 1+1+0+0+0+0+0+0=2, а если по-твоему не имеет значение кол-во разрядов, то почему сумма мЭняется?????? СИНК ЭБОУТ ИТ (реал ток)
Можно посчитать и иначе. Так как все цифры встречаются одинаковое количество раз, то можно вычислить среднюю цифру на каждый знак от 0 до 9. Будет 4,5. Так как мы считали и ноль, то знаков у нас всегда шесть, хоть это 936862, хоть 000010. Поэтому 4,5 умножаем на 6 и получаем 27кк. И плюс семизначное число, то есть 1.
есть еще 1 метод, но он более сложный наверное, сумма 1-9=45, каждая цифра в каждом столбце встречается, меньше в 10 раз, чем последнее число, то есть 100 000, рядов 6 6*100 000*45=27 000 000 и +1, то есть 27 000 001, ну в уме наверное это проще, ибо его можно использовать и для больших чисел
Сумма всех натуральных чисел равна -1/12. Высосать из этого утверждения можно следующее 1. Числовой ряд замыкается между минус бесконечность и плюс бесконечность. 2. Сумма всех отрицательных и положительных чисел (не только натуральных) равна -1/12. 3. Ассиметрия - сумма отрицательных чисел больше суммы положительных на 1/12. Проложить мостик между абстрактной математикой и реальной действительностью, в частности: 1. Вселенная замкнута в пространстве - объясняется расширение вселенной одинаково во сех направлениях (отсутствие центра вселенной). 2. Объясняется ассиметрия - преобладание материи над антиматерией. )))
Сообразил не сразу, почему без 1 мы сможем посчитать сумму всех знаков в миллионе. Западная манера подачи материала видимо для отсечки на начальном этапе не особо одаренных вроде меня и для зарабатывании денег при дополнительном объяснении. Радует то, что я все же смог.
Считал иначе. Выписал все числа от 000.000 до 999.999 в столбик. В каждом из 6 столбцов каждая цифра встречается ровно 100.000 раз. Получаем (0+1+2+..+9)*6*100.000, и ещё 1 от 1.000.000 = 27.000.001
Как любит говорить один хороший тубер в своих видосах после какого-нибудь вопроса: "Ставь лайк, если ты тоже (причина опроса) - посмотрим, сколько нас... ааааа наебал, не посмотрим" :))
Я тоже решил эту задачу, только я начал c нуля. Ноль добавить самую последнюю цифру и. т. д. (Массив с нуля начинается же ; ). ). N*(N/2)+(N/2) где N - любое натуральное число. Зацените, ребят. Я эту формулу придумал еще тогда, когда методом Гаусса не был знаком..
Такое решал на городской олимпиаде 7-8 классе) Я не математик, конечно, но формула n(n+1)/2 (к ней я пришёл путём решения олимпиад уже в 9-10 кл) иллюстрирует данное решение. При условии, что это ряд чисел 1,2,3,....,n-1,n
если ты задашь системе алгоритм сложения подряд то она значительно дольше будет его считать чем по второму алгоритму, для ЭВМ это очень важно, намного меньше ресурса уходит
Интересно. Я нашел ответ примерно также быстро, но иначе. Среднее значение цифры (0+9)/2 = 4.5. Всего цифр в числе 6, то есть среднее значение суммы цифр для числа будет 4.5*6=27. Всего чисел миллион, значит общая сумма цифр будет 27 миллионов. Ну и как раз 1000 000 еще не учитывался, так что плюс один.
"Всего цифр в числе 6" - ясно-понятно, а чего не 7, 8 или 9? Ведь судя твоей логике можно дописать сколько угодно нулей впереди и суть не поменяется, как тебе кажется. Многие задачи в математике решаются добавлением чего-то иного, что отсутствует в исходных данных. Посмотрел бы я как такое в физических или химических процессах прокатит? Потому как меняя исходные данные (условия) меняется и результат... Ты как на чувак на видео, который привёл в пример Гаусса, который, кстати говоря, решил без добавления новых данных, но не стал равняться на него...
от того что ты нули добавишь сумма изменится? здесь же он написал число цифр играющих роль, причем тут вообще исходные данные, ты вообще сравниваешь абсолютно разное
Ваш ход рассуждений математически совершенно неверен. Такого понятия как среднее значение цифры в математике не существует. К примеру, изменив условие задачи на "найти сумму цифр от 1 до 100 001", Ваш ход рассуждений приводит к ответу 27 000 029, что не является верным, т.к. ответ 27 000 003. Простите, но Вы подогнали решение под ответ.
Я сначала подумал, что сумма цифр по методу Гаусса не работает. Я тогда считал так: в каждом десятке двойка встречается 1 раз, в миллионе 100 000 десятков. Итого 200 000. Потом в каждой сотне по разу, но при этом сто раз еще при создании чисел от 200 до 299 , то есть умножаем на 10. в итоге опять 200 000. В конце цикла 200 000 - один раз умножаем на двойку умножаем на 100 000 повторений. Итого суммарно 1200 000. Потом тройка точно так же итого 1800 000, 4-ка 2400 000,= прибавляется по 600 000. Затем заканчиваем - девятка 5400 000. Суммируем, по методу Гаусса десяток - 1+ 9 + 2+ 8 итого 4 десятка плюс 5 = 45 * 600 000 (это число на которое прибавляется сумма на каждую цифру) получаем 27 миллионов плюс один.