Ещё немного про устный счёт: artyom_ferrier — LiveJournal
Долгое время (процентов так 90 нашей видовой истории) люди не владели таким арифметическим действием, как умножение.
Сейчас — владеют. Если нет артрита, если пальцы попадают по клавишам калькулятора.
Но если нет ни артрита, ни калькулятора — многие современные люди зачастую впадают в ступор даже на задачках в рамках таблицы умножения.
Только и могут, что разводить руками и жаловаться, как плохо их учили в школе — никакой арифметики в голове не удержалось даже до опохмела после выпускного, не говоря уж про “до первых седин”.
И калькуляторы калькуляторами, но, конечно, это не дело, когда человек не способен самостоятельно произвести совершенно элементарные действия в голове.
Ломоносов, в общем-то, правильно говорил про мать-мать-матику: «Хороша уже тем, что ум в порядок приводит». Как-то вот гонять кровь по мозгу, а данные по ячейкам памяти — всяко невредно.
К тому же, в некоторых случаях математические экзерсисы позволяют скоротать время. Скажем, когда совершаешь свой утренний заплыв, преимущественно брассом, неторопливо — начинаешь скучать через милю-другую. Ну и чтоб отвлечься — посчитать что-нибудь.
Какие математические способности следует называть «нормальными»?
Я бы сказал — когда чел свободно перемножает трёхзначные числа в уме. В разумное время (двадцать секунд, полминуты, такого порядка) и желательно без ошибок.
Это – «нормальный» показатель, поскольку я сам так умею.
Вот Лёшка, мой сынок, перемножает и четырёхзначные, и более.
Но я считаю, что это баловство и излишество. Делать мальчишке нефига. Всё-то выпендривается.
Хотя на самом деле ему просто много приходится программировать для своей «медиаимперии» – и у него выработалась привычка постоянно, в «фоновом режиме», прикидывать диапазоны значений, проверяя, нет ли лажи в коде.
А я — гуманитарий. Политик, гангстер, философ. Мне такой цифровой экстрим не нужен, меня для коротания времени вполне устраивает перемножение трёхзначных.
И это — совсем несложно, на самом деле. В принципе, поднатаскавшись, можно перемножать их и «по-танковому», в лоб. То есть, разлагать на разряды — и вперёд по очереди.
223 Х 498
И вот сначала на 400, потом на 90, потом на 8. А потом сложить.
Так тоже можно. Но, честно, немножко упреешь, если не имеешь способностей вундеркинда-аутиста или знаменитого циркового жеребца по кличке Умный Ганс.
Поэтому лучше всё-таки предварительно присмотреться к множителям — и прикинуть, что с ними можно сделать, помимо того, чтобы разложить на разряд.
И вот при некоторой внимательности можно обнаружить, что 498 — это 500 без двух.
Значит, умножаем 223 на 5, получаем 1115 – да два нуля — 111500, да 223 на 2 — это 446, а теперь вычитаем 446 из 111500, получаем 111054.
Секунд десять вычислений, при некоторой тренировке, не больше.
Ну и это-то очевидный приём — дополнение множителя до какого-то «удобного» числа с последующим вычитанием «излишка».
Что менее очевидный приём — тот, который я называю «четвертованием».
Как это выглядит?
Начнём немного издалека.
Вот, предположим, нам нужно умножить 184286 на 5.
Да, 5 — это однозначное число, вообще «ни о чём», но первый множитель — шестизначный. И тут-то можно устать пыль глотать, перемножая его по всем шести разрядам да суммируя значения.
Поэтому проще будет — его разделить. На 2.
Это действительно просто, безо всяких столбиков, безо всяких бумажек с ручками – мы за секунду получаем 92143.
А теперь — осталось только пририсовать нолик. 921430.
Мы разделили на 2, умножили на десять — и это то же самое, что умножить на 5.
А если разделить на 4 и умножить на 100, пририсовать два нолика, — это то же самое, что умножить на 25.
А если разделить на 8 и добавить три нолика — это как умножить на 125.
И вот прежде, чем затевать некие преумножительные операции — полезно посмотреть, нет ли в каком-то из множителей близости к «опорным точкам», числам, кратным 25 и 125 (их несложно запомнить).
Например, умножаем 941 на 76.
Подмечаем, что 76 — это почти как 75, только на единичку больше.
А 75 — это три четверти от ста.
Значит, для начала делим 941 на 4. Это очень просто сотворяется, деление на степени двойки, если приноровиться. 900/4 равно 225, да 40/4 равно 10, да один на четыре — 0,25, итого 235,25. Умножаем на сто — убираем запятую. 23525.
Это — как если бы мы умножили 941 на 25.
Но нам нужно — на 76.
Поэтому, пока — умножаем ещё на 3, ведь 75 — это три четверти.
Получаем 70575.
И прибавляем 941. Получаем 71516.
Быстренько проверяем, навскидку, по последним цифрам множителей.
Да, 1 на 6 — не может дать ничего другого, кроме как шестёрки.
Ещё — иногда полезно бывает делать проверку делимости на 3 (или 9).
Если сумма цифр в числе делится — то и само оно тоже. И в произведении множителей это свойство никуда не девается. Но если его не было ни в одном из множителей — то и появиться ему неоткуда.
В данном случае ни 941(14), ни 76(13), ни 71516(20) — на три не делятся.
Но на самом деле, умножение трёхзначного на двухзначное — слишком простой случай, чтобы морочиться проверкой. Там нечего забывать в процессе, там нет места для ошибки.
Но вот трёхзначное на трёхзначное — это уже немножко заковыристей.
Скажем, 239 на 873.
Вроде, выглядит страшно — но тут мы должны подметить, что 873 — это близко к 875 (всего без двух). А 875 — это семь восьмых от тысячи, 125*7.
И что мы можем с этим вытворить?
Для начала — поделим 239 на 8.
Замечу, тут тоже удобнее осознать, что 239 — это 240 без единицы. А значит: 30 – 0,125=29,875.
Добавляем три нолика, убираем запятую. 29875 — это как если б мы умножили 239 на 125. Но нам нужно на 875, а это семь раз столько.
Умножаем, для простоты, 30000 на 7, получаем 210000, а теперь — берём усемерённую разницу между 29875 и 30000. Те же 125 на 7, те же 875, уже нам знакомые. Вычитаем из 210000 — 875. Получаем 209125.
Это — произведение 239 на 875. Но нам нужно — на 873, на два меньше. Значит, из 209125 вычитаем 239*2=478, получаем 208647.
Проверяем по концевым цифрам. 9*3 — правдоподобно, что 7 получится?
Да, вполне.
Ну, значит, так и есть.
Возьмём ещё пример, не столь очевидный. Вот просто — из генератора случайных чисел возьму.
719*436
Не, ну здесь-то «четвертовать» без надобности. Здесь и обычным манером удачно раскладывается и перемножается.
436 на 700 — 305200, да 436 на 20 (ну не 19 же!) – 8720, да вместе — 313920. Но теперь — вычтем 436 (ибо было 20, а не 19). Можно было и из 8720 вычесть перед суммированием, но это непринципиально на самом деле. Главное — не забыть хоть где-то это сделать. Так или иначе, конечный итог — 313484.
Да, арифметическое четвертование, как и любой приём — в здравом уме применяется тогда, когда удобен, а не «ради принципа».
Но вот случай, где всё-таки удобней «четвертовать».
227 на 864.
227 — это 25*9+2.
Значит, делим 864 на 4, для начала. Получаем 216, вот так нацело.
Теперь — можем пойти двумя путями, чтобы получить произведение на 225. Или умножить на тысячу, приводя к 250, да оттуда одну десятую вычесть, или — умножить на сто и ещё на девять.
Но я всё-таки возьму 216000 и вычту 21600.
Получаем 194400. Вот это — 864*225.
Но у нас было 227, поэтому прибавляем ещё 864*2, то бишь 1728.
Итого — 196128.
Это правдоподобно, что 7*4 даёт 8?
Странно было бы что-то иное.
А как с делением на три?
864 делится как на 3, так и на 9, – и 196128 тоже. Значит, не накосячили, наверное (Лёшка — примерно так свой код и проверяет, и, вроде, работает 🙂 ).
Серьёзно же, понятно, что калькулятор считает быстрее человека.
Но когда ты окажешься на необитаемом острове и сядут все батарейки во всех девайсах — как ты будешь вычислять долготу по тени от палочки?
Ладно, на самом деле — я и сам уже хрен помню, как вычислять долготу по теням. Это довольно хлопотно, это не то что секстант из говна и палок на Полярную навести, для широты.
Поэтому — с необитаемого острова придётся плыть. Но когда наскучит картина этих назойливых акульих плавников среди волн вокруг — можно развлекать себя, между гребками брасса, перемножением трёхзначных чисел. А чтоб это было веселее — при случае можно их «четвертовать». Но без фанатизма.
Приблизительный подсчет в уме. Деление в уме . Магия математики [Как найти x и зачем это нужно]
Давайте начнем с очень простого вопроса, на который существует очень простой ответ, которому по какой-то неизвестной причине не учат в школах:
а) если вам нужно перемножить два трехзначных числа, сможете ли вы сразу сказать, из скольки знаков будет состоять результат?
И чуть посложнее:
б) число из скольки знаков получится, если умножить четырехзначное число на пятизначное?
В школе почти все время уходит на то, чтобы подбирать цифры при умножении и делении, а не на то, чтобы подумать о том, насколько большим будет результат. Да-да, умение примерно оценивать, насколько большим будет ответ, куда важнее умения находить его последние или даже первые цифры. (Подумайте сами, какой практический прок от знания того, что итог начинается с цифры 3, и не полезнее ли знать, к чему он будет ближе: к 30 или 300 000 или вовсе к 3 000 000?)
Ответ на вопрос (а) – из пяти или шести цифр. Знаете почему? Минимальный возможный пример – 100 ? 100 = 10 000 (здесь пять цифр). Максимальный – 999 ? 999, результат которого однозначно будет меньше семизначного 1000 ? 1000 = 1 000 000 (пусть и ненамного). Но раз 999 ? 999 меньше, значит, в ответе будет шесть цифр (давайте, кстати, вспомним, насколько легко это посчитать: 9992 = (1000 ? 998) + 12 = 998 001.) Вот и вывод: результатом перемножения двух трехзначных чисел будет пяти– или шестизначное число.
Ответ на вопрос (б) – из восьми или девяти цифр. Почему? Наименьшее четырехзначное число – 1000, которое можно представить в виде 10? (единица с тремя нолями). Наименьшее пятизначное число – 10 000, равное 10 (Откуда взялось 107? Смотрите: 10? ? 104 = (10 ? 10 ? 10) ? (10 ? 10 ? 10 ? 10) = 107.) Ну а наименьшим произведением будет число, лишь ненамного меньшее десятизначного 104 ? 105 = 109, то есть девятизначное.
Такая логика приводит нас к простому правилу: умножение m-значного числа на n-значное даст число, в котором
Конкретное количество цифр в ответе легче всего определить, взглянув на начальные (крайние левые) цифры перемножаемых чисел. Если их произведение больше или равно 10, тогда в ответе будет m + n цифр (например, в 271 ? 828 произведение крайних левых цифр – 2 ? 8 = 16 – больше десятки, поэтому ответом будет шестизначное число). Если произведение крайних левых цифр меньше или равно 4, тогда в ответе будет
В результате у нас получается еще более простое правило, уже в отношении деления: деление m-значного числа на n-значное даст число, в котором m – n
То есть девятизначное число, разделенное на пятизначное, даст нам четырех– или пятизначный результат. Правило определения более конкретного ответа здесь еще проще, чем в случае с умножением. Крайние левые цифры не нужно ни умножать, ни делить – достаточно их просто сравнить. Если крайняя левая цифра делимого меньше крайней левой цифры делителя, в частном будет меньшее количество цифр (m – n). Если же крайняя левая цифра делимого больше крайней левой цифры делителя, в частном будет больше (
Рассказывать в подробностях про процесс деления в уме я здесь не буду: он мало чем отличается от деления в столбик на бумаге (но каким бы методом вы ни воспользовались, считать нужно слева направо). Но есть парочка уловок, которые значительно облегчат вам жизнь.
Скажем, если вы делите на 5 (или на любое число, заканчивающееся на 5), удвойте числитель и знаменатель, и задача станет проще.
После удвоения обоих чисел хорошо видно, что и 246, и 9 кратны 3 (мы поговорим об этом подробнее в главе 3), поэтому задача упрощается до деления отдельно числителя и знаменателя на 3.
Отступление
Взгляните на взаимно обратные числа для чисел от 1 до 10:
1/2 = 0,5; 1/3 = 0,333…; 1/4 = 0,25; 1/5 = 0,2;
1/6 = 0,1666…; 1/8 = 0,125; 1/9 = 0,111…; 1/10 = 0,1
Все дроби здесь либо конечны, либо цифры в них начинают повторяться со второго знака после запятой. Единственным исключением является десятичная дробь от 1/7, повторение в которой начинается с седьмой цифры:
1/7 = 0,142857142857…
(Причина этой закономерности в том, что все другие числа от 2 до 11 делятся на 10, 100, 1000, 9, 90 или 99, ближайший же делитель для 7 – 999 999.) Если же записать цифры десятичного аналога 1/7 в виде круга, произойдет чудо:
Что интересно, все другие дроби со знаменателем 1/7 тоже могут воссозданы с помощью бесконечного движения по этому кругу – меняться будет только точка начала этого движения. Посмотрите сами:
3/7 = 0,428571428571…; 4/7 = 0,571428571428…;
5/7 = 0,714285714285…; 6/7 = 0,857142857142…
Давайте закончим эту главу тем же вопросом, который мы уже задавали несколько страниц назад. Чему будет равняться сумма всех чисел в таблице умножения? На первый взгляд звучит пугающе – так же, как и попытка найти сумму первых ста чисел. Но знакомство со всеми описанными выше замечательными закономерностями, которые так ловко заставляют числа танцевать, значительно повышают наши шансы легко и красиво найти правильный ответ.
Начнем с первого ряда – посчитаем сумму всех чисел в нем. Можно – как Гаусс, можно – с помощью формулы треугольных чисел, а можно – путем обычного сложения:
1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = 55
Так, теперь второй ряд. Вот как это будет выглядеть:
2 + 4 + 6 +… + 20 = 2 (1 + 2 + 3 +… + 10) = 2 ? 55
По той же логике, 3 ряд будет равен 3 ? 55. И так далее, и тому подобное, и в результате сумму всех чисел в таблице умножения можно подсчитать так:
(1 + 2 + 3 +… + 10) ? 55 = 55 ? 55 = 55?
Ну а возвести в уме 55 в квадрат вы теперь можете легко и просто… 3025!
Умственно эффективный алгоритм умножения | by Dan
Умножение 5-значных чисел в уме считается либо невозможным, либо ограниченным областью знаний. Сегодня вы научитесь достигать невозможного самостоятельно, увидев некоторые методы решения проблем и шаги, которые я предпринял для разработки этого алгоритма. В конце я также включу код, реализующий этот новый подход, если вам интересно.
Более продвинутые методы, такие как алгоритм Карацубы, имеют дополнительные накладные расходы, поэтому они превосходят традиционные методы только при превышении нескольких сотен цифр. Из-за этого такие библиотеки, как Java BigInteger, используют традиционный подход до достижения этого предела.
Этот подход требует значительно меньше памяти, что значительно упрощает ментальную арифметику, а также уменьшает количество шагов суммирования. Это также отличный кандидат для устройств с ограниченными ресурсами.
Сравнение с другими алгоритмами умножения двух N-значных чисел:
- Метод начальной школы: 2N² + 2N сложения с использованием умного подхода, исключающего добавление нулей. При выполнении в уме вам также необходимо запомнить промежуточные значения, которые необходимо суммировать, тогда как реализация кода может повторно использовать пространство результатов.
- Решетчатое умножение: N² + 2N добавления плюс дополнительная память для всех переносов в верхних треугольниках каждой ячейки. Это требует на N² меньше сложений, чем метод начальной школы, если суммировать по диагоналям, а не добавлять большие значения со многими нулями, которые они представляют.
- Этот алгоритм: Только добавление N² и очень эффективное использование памяти за счет отслеживания только одного переноса.
Все 3 алгоритма выполняют одинаковое количество умножений с разницей в количестве сложений и эффективности использования памяти.
Путь к открытию
Фото Бена Уикса на UnsplashПодход, которому учат в школе, требует вычисления множества больших промежуточных значений, из-за которых вычисления в уме быстро разваливаются:
Подход начальной школы с использованием всего 3 цифрЧтобы найти более эффективный подход, мы применим метод начальной школы, но вместо цифр будем использовать переменные и проанализируем, как они влияют на ответ.
Мы начнем с умножения однозначных чисел и постепенно будем увеличивать количество цифр, ища закономерности. Мы выберем одни и те же наименее значимые переменные при работе с меньшим количеством цифр, чтобы переменные были одинаковыми на всех итерациях:
Переменные для цифрЭтот метод имеет решающее значение для того, чтобы увидеть закономерности с меньшими усилиями.
Однозначные числа:
После умножения однозначных чисел не появляется никаких новых идей, потому что пока мы ничего не говорим.
Квадратные скобки обозначают цифру в результате без переноса. Мой подход заключается в том, чтобы решить более простую версию задачи с крошечными цифрами, где перенос не требуется, а затем в конце развить решение для обработки переноса.
Двузначные числа:
Мы можем видеть, что последняя цифра, [H*D] , одинакова для обеих итераций, но мы не можем сделать вывод, так как у нас есть только 2 выборки.
3-значные числа:
О, это выглядит интересно, так как 2-я последняя цифра, [H*C + G*D] , теперь тоже совпадает! Давайте посмотрим на еще одну итерацию, чтобы получить более сильный сигнал.
4-значные числа:
Шаблон расширяется здесь, поэтому мы видим, что:
- Последняя цифра всегда [H*D]
- 2-я последняя цифра всегда [H*C + G*D] при умножении чисел, которые имеют по крайней мере 2 цифры
- 3-я последняя цифра цифра всегда [H*B + G*C + F*D] при умножении чисел, которые имеют по крайней мере 3 цифры
Insights
Фото Хуана Румимпуну на Unsplash та же структура при умножении любых чисел не менее чем на k цифр
Первый пункт многообещающий, поскольку он предполагает, что мы могли бы вычислить каждую цифру, если бы мы могли обнаружить шаблон для k -й последней цифры. Однако умножение двух k -значных чисел дает результат 2*k цифр, так что мы на полпути. Мой план состоит в том, чтобы найти образец для последних k цифр и адаптируйте это ко всему результату, поскольку я ожидаю, что согласованный шаблон будет применяться ко всем цифрам.
Второй пункт еще более многообещающий, поскольку он предполагает, что мы должны иметь возможность постепенно генерировать результат в обратном порядке, начиная с наименее значащей цифры, вместо того, чтобы вычислять весь результат одним гигантским усилием. Это должно помочь снизить умственную нагрузку.
Разблокировка шаблона k-й последней цифры
Фото Пола Скорупскаса на Unsplash Я большой сторонник визуального рисования задачи, когда это возможно, поскольку наша зрительная кора намного лучше определяет шаблоны по сравнению с аналитическими подходами. Используя 4-значную итерацию, давайте нарисуем линию между всеми цифрами, которые нужно умножить для каждой цифры в результате.
Последняя цифра: [H*D]
2-я последняя цифра: [H*C + G*D]
3-я последняя цифра: [H*B + G*C + F* D]
4-я последняя цифра: [H*A + G*B + F*C + E*D]
5-я последняя цифра: [G*A + F*B + E*C]
6-я последняя цифра: [F*A + E*B]
7-я последняя цифра: [E*A]
Эврика!
Рисунок цифр на удивление легко визуализировать!
- Создайте скользящее окно, достаточно широкое, чтобы вместить все цифры. Начните с окна справа, содержащего последнюю цифру каждого входа.
- Перекрестите каждую цифру в окне с противоположной диагональю. Умножьте все цифры, которые пересекаются, и сложите произведения вместе, чтобы получить текущую цифру в результате.
- Сдвиньте окно влево на 1 позицию и повторяйте предыдущий шаг, чтобы сгенерировать следующую цифру, пока в окне больше не будет цифр.
Скользящее окно легко увидеть с помощью большого и указательного искателя.
Преимущество шага 2 в том, что он невероятно эффективно использует память, поскольку вам нужно только отслеживать текущий счет и добавлять к счету по одной паре пересекающихся цифр за раз. Это позволяет легко выполнять мысленно с несколькими пробными прогонами.
Перенос
Фото Джордана Кунса на UnsplashПрименение описанного выше подхода не работает, так как некоторые из вычисляемых цифр занимают более 1 цифры после добавления пересекающихся пар. Так как это не может быть правильным, давайте сохраним только последнюю цифру вычисления и перенесем остальные, чтобы посмотреть, что произойдет.
Умножим 87 X 96 = 8352 с новым подходом:
сумма = 6 * 7 = 42
Отсечь последнюю цифру суммы для результата и перенести 9006 на остальные: 3: результат = _ _ _ 2 ( 2 из 42 )
перенос = 4 (после отсечения последней цифры от 42 )
Сдвиньте следующее окно влево: 00 digit3
сумма = 4 + 6 * 8 (перевозка + первая кросса)
= 4 + 48
= 52Tally = 52 + * 7 (Tally = 9000 52 + * 7 (Tally = 9000 52 + * 7 (Tally = 9000 52 + * 7 (Tally = + остаток крест-накрест)
= 52 + 63
= 115
отсечь последнюю цифру от подсчета как следующую цифру в результате:
1 0 2 9000 9 результат = 9000 5 из 115 перед предыдущим результатом _ _ _ 2 )перенос = 11 (после отсечения последней цифры от 115 )
Сдвиньте окно влево в последний раз:
tally = 0 9 9 0 9 0 9 0 9 0 9 0 8 (перенос + крест-накрест)
= 11 + 72
= 83
результат:
результат = 8352 (счет 83 перед предыдущим результатом _ _ 52 )
Успех, результат соответствует нашим ожиданиям!
Подход работает таким же образом при работе с другим количеством цифр, поскольку вам просто нужно выровнять оба числа по правому краю и прекратить перекрещивание, когда цифры заканчиваются, поскольку недостающие цифры являются нулями.
Перед тем, как продемонстрировать свои новые навыки, я рекомендую потренироваться с двузначными числами, постепенно добавляя по одной цифре за раз, поскольку для адаптации к такому образу мышления требуется некоторая практика. Я рекомендую записывать цифры результата, когда вы вычисляете их справа налево, так как в конечном итоге вам все равно нужно будет представить ответ, так что запоминать на одну вещь меньше.
Вот реализация Kotlin, работающая с десятичной системой счисления:
/**
* Умножает [значение1] на [значение2], где это массивы
* с 1 цифрой на элемент.
*/
весело умножить (значение1: IntArray, значение2: IntArray): IntArray {
значение меньше: IntArray
значение больше: IntArray
if (value1.size < value2.size) {
меньше = значение1
больше = значение2
} else {
меньше = значение2
больше = значение1
}знач результат = IntArray(smaller.size + large.size) { 0 }
var resultIndex = result.lastIndex
var Carry = 0// Обрабатывать первую фазу до тех пор, пока окно не перестанет зависать
// правая сторона
for (windowStart in large.lastIndex downTo 1) {
var tally = Carry
// пересекаем правую часть меньшего значения с левой стороной
// большего значения
var smallIndex = small.lastIndex
// Остановимся, когда в меньшем значении не останется цифр
// так как все они быть нулями
val numStepsInCurrentWindow = min(smaller.size, large.size - windowStart)
for (largerIndex in windowStart до windowStart + numStepsInCurrentWindow) {
tally += small[smallerIndex] * large[largerIndex]
smallIndex--
}
val (nextDigit, updatedCarry) = getNextDigitAndCarry(tally)
перенос = updated1 результат [9018 resultIndex] = nextDigit
resultIndex--
}// Обрабатываем вторую фазу, когда окно сдвигается с левой стороны
// до тех пор, пока в меньшем значении
не останется цифр для (windowEnd in small.lastIndex downTo 0) {
var tally = перенос
var smallIndex = windowEnd
for (largerIndex in 0..windowEnd) {
tally += меньше[smallerIndex] * больше[largerIndex]
smallIndex--
}
val (nextDigit, updatedCarry) = getNextDigitAndCarry( tally)
перенос = updatedCarry
result[resultIndex] = nextDigit
resultIndex--
}// обработка оставшегося переноса. Эффективная реализация
// в двоичном коде будет использовать битовый сдвиг без зацикливания здесь
while (carry > 0) {
val (nextDigit, updatedCarry) = getNextDigitAndCarry(carry)
result[resultIndex] = nextDigit
Carry = updatedCarry
resultIndex--
}
return result
}/**
* Вычисляет следующую цифру в результате вместе с перенос.
*
* Эффективная реализация убрала бы эту функцию, поскольку она
* создает объект в тесных внутренних циклах.
*/
fun getNextDigitAndCarry(tally: Int): Pair{
// Битовые сдвиги здесь более эффективны при работе с двоичной системой счисления
val Carry = tally / 10
return Pair(tally - 10 * Carry, Carry)
}
Если вам это интересно, вы можете получить полный доступ к тысячам других подобных писателей по присоединившись к Medium .
Рабочий лист для урока: Умножение в уме | Нагва
Начать практику
В этом рабочем листе мы будем практиковаться в использовании различных стратегий мысленного умножения однозначных чисел.
Q2:
Майкл знает, что числа можно разбивать на части, чтобы упростить вычисления.
Завершите вычисления, чтобы найти ответ. 35×2=7×5×2=7×10=?
Выберите один из способов разбить один из множителей, чтобы решить 5×16.
- А5×2×8
- В5×3×8
С5×10×6- Д5×1×6
Какое из этих чисел равно 5×16?
- А5×6=30
- В50×6=300
- С15×8=120
- Д10×8=80
Q3:
Мы можем использовать свойство ассоциативности, чтобы помочь нам умножить.
Найдите недостающий множитель: 16×5=(×2)×5.
Найдите недостающее произведение: 16×5=.
Q5:
Джексон нашел способ сделать 10, чтобы ему было легче умножать.
Найдите недостающие числа, используя его стратегию.
36×5=×10
2×35=10×
Q6:
Джеймс и София знают, что они могут умножать 3 числа в любом порядке.
Они оба находят выражение, равное 7×4×5.
Джеймс не может решить 28×5. Используйте выражение Софии, чтобы найти ответ на 7×4×5.
Если мы не знаем 28×5, мы можем записать 28 как, а затем решить 7×4×5, сделав сначала 20.
- A7×4
- В6×5
- С6×3
- Д8×3
Q7:
Вычислить 14×8.
Используйте факт умножения Мии, чтобы помочь вам.