Pull to refresh

Comments 95

Метод, которому учат большинство детей в школе, — длинное умножение — включает в себя много шагов с отдельными произведениями, которые нужно записывать и позже комбинировать.

В голове:

27*9 = 180+63 = 243

32*9 = 270+18 = 288

16*12 = 160+32 = 192

Это пока все в 3 операции укладывается в голове. А вот умножить 17 на 16 уже сложнее, потому что нужно 170 + 7*16, а это ещё одно разложение (70+42), итого 4 операции. Это уже сложно в голове держать.

Вообще, если чисто близко к круглому, как ниже уже сказал nin-jin, лучше не суммировать, а вычитать из круглого произведения. Получится 20 × 16 - (16 × 3) = 320 - 48 = 272.

Частный случай, конечно, но таблицу квадратов до 20 мы в школе учили

17 * 16 = 17^2 - 17 = 289 - 17 = 272

upd: ну или наоборот 16^2 + 16 = 256 + 16 = 272

"я зашёл, чтобы написать этот коммент" (но таблицу квадратов учили до 99, зачётом было 30 любых вразброс)

"умножить 17 на 16" это точно не "170 + 7*16" Лучше расписывать сразу подробнее, чтобы не ошибаться: 17*10 + 17*6. А по сути - именно подобный быстрый счёт со знанием таблицы умножения оптимален для массового обучения младших школьников. Более древние методики хоть и полезны для кругозора, но не так эффективны для человеческого разума, в том числе описанный в статье "двоичный" способ

Который к тому же описан неправильно. Ни в одном из примеров, где получается двузначное число в левой столбце, не происходит двукратного умножения:

В правом столбце удваивайте число столько раз, сколько цифр содержит число в левом столбце.

А если бы это и работало, то по описанию непонятно, подсчет цифр нужно делать до того, как откинем дробную часть или после.

Это аФФтар неправильно выразился (почему ? Сам не понял методику ???)

Число в правом столбце умножается на 2 столько раз, СКОЛЬКО ЧИСЕЛ В ЛЕВОМ. Не цифр !!!

То есть, левый столбец формирует строки, а в правом столбце в каждой этой строке происходит удвоение (правого) числа из предыдущей строки.

Во-первых, вычитание (и его сокращённая форма – деление) в уме даётся сложнее суммирования-умножения. А во-вторых, у вас ошибка по невнимательности.

А вот умножить 17 на 16 уже сложнее, потому

16*16+16 =256+16=272 .
Не, случай частный, понятно, но тут прям вот.

По «русскому» методу 17*16 превращается в … 17*16 ! Как и для любого умножения на число "степени двойки", а для (второго) числа, которое не является степенью двойки требуется (по факту) расположить это числа на степени двойки ...

Так что для устного счета метод подойдёт только гениями устного счета.

Это просто древний Египетский метод, который только интересен тем, кто интересуется математикой.

Но ведь интересен же !!! :-)

Метод позволяет лучше понять "привычное" умножение, вдуматься в суть процесса.

В уме 4 раза умножить на 2 намного проще, чем сразу на 16.

Например, 62879*16 я не осилю, а *2*2*2*2 думаю, смогу

Все предложенные примеры легко решаются в уме быстрее чем было бы на бумажке расписывать этим способом. Если же нужно решить действительно сложный пример, и есть время на всю эту писанину, то есть время и на то, чтобы вытащить из кармана телефон и вбить числа в калькулятор. "Русский способ умножения" выглядит как абсолютно бесполезная ерунда.

"Русский способ умножения" выглядит как абсолютно бесполезная ерунда.

Этот способ умножения предназначен для тех, кто не знает таблицы умножения.

Но знает таблицу деления.

Но знает таблицу деления.

При делении ответ подбирается. Например, при делении столбиком, как нас учили в школе, предполагается очередная цифра ответа и догадка проверяется умножением. При делении на 2 догадка легко проверяется сложением. Тем более, что в задачах крестьянина 19 века числа обычно небольшие.

Зато он в двоичном виде - сдвиг и сумматор, причем складывать меньше чем сдвигать.

Все предложенные примеры легко решаются в уме быстрее чем было бы на бумажке расписывать этим способом.

Это Вы ещё китайский способ не видели (где надо рисовать линии по значению цифр и считать точки пересечения)

Странно почему он для этого не использует $mol

type result = $mol_type_int_mult< 17, 16 >

А вот умножить 17 на 16 уже сложнее

Пример неудачный, несложно:

17*6= 60+42=102

170+102=272

Кажется, для умножения на девять проще идти через десятку

27*9 = 270 - 27 = 243

32*9 = 320 - 32 = 288

Да, так гораздо проще

27*9 проще же , умножить на 10 и вычесть 27

Я чаще так решаю:
32*9 = 320-32
27*15 = 270+135

Программисту не нужно даже вычислять 32 * 9, потому что это константа 288 )

нас в школе научили считать умножение обычным столбиком. Позже все это стало удаваться сделать в голове.

Пипец какое замороченное умножение, где приходится делать кучу куда более сложных делений. Есть метод проще, где всего три простые операции в уме:

9*27 = 10*27 - 27 = 270 - 30 + 3 = 240 + 3 = 243
9*32 = 10*32 - 32 = 320 - 30 - 2 = 290 - 2 = 288

А дальше можно обычное инженерное 93*94 = 8100 + x, пускай будет ~10 000, ну ладно 9

округляем вверх! Памяти много не бывает

93*94 = 10_000 - 7*100 - 6*100 + 6*7 = 10_000 - 1300 + 42 = 8_700 + 42 = 8742

Для примерного счета можно использовать двойное округление вверх с вычетанием.

93*94 ~ 93*100 - 6*90 ~ 8760

54*94 ~ 54*100 - 6*50 ~ 5100

(93 х94) = 100 х (1-0,07) х 100 х ( 1-0,06) ≈ 10000 х (1-0,07-0,06) = 8700

Аналогично, считаю всегда также.

Даже в более сложных кейсах так проще разложить, а потом собрать:

7 * 27 = 10 * 27 - 3 * 27 = 10 * 27 - 3 * 30 + 3 * 3 = 270 - 90 + 9 = 189

Несмотря на сложную запись, в голове это считается почти мгновенно.

Чтобы умножать на 7, иногда проще умножить на 5 (несложно приписать нолик даже в уме и поделить на два) и дважды докинуть множимое. Впрочем, все это уже есть в разных книжках по устному счету, да даже в вики.

А можно проще 9*27= 270- 27 =243 или же 180 + 63 = 243))) делов то!

9х32 это 9х16х2 или 12х12х2, т.е. 144х2.

А степени тройки вообще в памяти где-то висят, как и степени двойки (9х27 это 3^2*3^3 = 3^5)

Описание метода какое-то кривое (кривой перевод?), да и во втором примере, при перемене мест множителей оно не выполняется. "В правом столбце удваивайте число столько раз, сколько цифр содержит число в левом столбце." - надо просто удваивать.

Тоже голову сломал читая эту концепцию. 9 27 0 - в левом столбце - 9 - одна цифра. Один раз удвоил.

И 27 *
9 = ну два раза 9 удвоил и всё?)

Кстати есть статья из 2015 тоже с кривым переводом

Это они еще счет древних русов не видели

Это они еще счет древних русов не видели

А уж что у ящеров было, мм... )))

Да ну, в десятичной системе удобнее и быстрее в десятичный столбик считать, а не в двоичный.

Ну, 150 лет назад вес, длинну, время, объём, количество, и, самое главное, деньги - в русской деревне всё считалось в двоичной системе. А такие невообразимо сложные вещи, как возраст или день года, вообще не считались, а отсчитывались от приметного события.

Если ещё на нескролько веков назад отмотать, то в русском языке, помимо единственного и множественного, есть ещё и двойственное число.

Сейчас нас сплошь окружает десятичная система. Чтобы посчитать в двоичной и понять, сколько же это, надо ещё туда-сюда в двоичную систему и обратно перевести. А раньше - наоборот:

Два-пять шапок серебра!

То, есть, это будет десять?

Царь велел тотчас отвесить.

Два-пять шапок серебра!

Римское V - пятерня, 5 пальцев. Римское Х - 2 пятерни.

Римские цифры изобрели, чтобы записывать ( долг : )). ) на счётной палочке. Для этого они идеальны.

Ну, 150 лет назад вес, длинну, время, объём, количество, и, самое главное, деньги - в русской деревне всё считалось в двоичной системе.

Одноразрядные, что ли? 0 или 1?

Есть деньги\нет денег. Ничего и не поменялось =)

Ну, слушайте, расскажу про винишко, знанием иных мер вам врят ли в жизни пригодится блеснуть.

В винном бочонке два полубоченка

В полубоченке две корчаги

В корчаге два ведра

В ведре два полуведра

В полуведре две четверти

В четверти две получетверти или же две двойные бутыли

В получетверти две бутылки

В бутылке три!!! стакана

В бутылке же две косушки

В косушке две чарки

В чарке два шкалика

А шкалик, это примерно дринк, на современный англицкий манер.

Кстати, английский фунт, одна из последних денежных единиц, перешедших на десятичную систему, ажно в 1971 году. До этого была двоичная (с добавочным хитрым перепрыгом между полукроной и фартингом).

В ведре два полуведра

Дикая природа удивительна.

И непредсказуема.

В бутылке три!!! стакана

Тут вам не пинты в галлоны пересчитывать ;)

Дикая природа удивительна.

В выдре две полувыдры!

Ну вы чего, выдры атомарны

Если ещё на нескролько веков назад отмотать, то в русском языке, помимо единственного и множественного, есть ещё и двойственное число.

А если отмотать много веков и переместиться южней, то в древней Месопотамии использовалась шестидесятеричная система исчисления.
Собственно говоря, часы до сих пор на ней основаны.

GCC использует этот алгоритм, для платформ, у которых нет аппаратного умножения. Например, для простейших RISC-V.

Там, где мы в C напишем

uint32_t a, b;
// Тут мы получаем откуда-нибудь значения
// ...
// А вот тут как раз наше умножение
uint32_t c = a + b;

GCC вставит функцию по ссылке выше, если в чипе нет умножения.

Потому что этот алгоритм - то же умножение в столбик, только в двоичной записи.
"крестьянское умножение"

9	27
---
9   27  | 27
4	54  | 0
2	108 | 0
1	216 | 216
---
216 + 27 = 243

И умножение в столбик
9 = 1001₂
27 = 11011₂

.     11011
.      1001
-----------
1|    11011 | 27 * 1*2⁰ = 27 | Вот "27", появившаяся при нечетной 9
0|       0  | 27 * 0*2¹ = 0
0|      0   | 27 * 0*2² = 0
1| 11011    | 27 * 1*2³ = 216 | Вот "216", появившаяся при нечетной 1
-----------
.  11110011 | 216 + 27 = 243

"Болгары восхитились" (с)

Тут первый множитель раскладывается на сумму степеней двойки
9х27 = (2х2х2+1)х27 = 216+27
27х9 = (2х2х2х2+2х2х2+2+1)х9 = 144+72+18+9

При такой записи столбиком получается кэширование и переиспользование результатов. Интересно, но обычное умножение столбиком гораздо быстрее.

И это новый способ умножения? Только путает, имхо.

27×9=3*9*9=3*3²*3²=3⁵=243 
// просто приводим к степеням тройки

Когда нельзя просто привести к такому удобному виду, всё равно множители в числах можно перегруппировать, и это будет гораздо удобнее заумных способов.

А вот из действительно удобного, например в процентах, можно представить 40% от 75 как 75% от 40 (перевернуть наоборот), и так практически с любыми, т.к. это по сути аналогично a×b=b×a.

За проценты спасибо, а степени тройки в топку. Вопервых частный случай, замучаешься искать в большинстве случаев. А во вторых три в пятой - нифига не проще чем перемножить столбиком.

Уверен, есть простой способ через π сделать

Ага. Позвать Фурье. И Эйлера, заодно и е пристроить ;)

Может, Непера?

Ага, его еще очень практиковали в средние века, используя серебристые и желтые кругляшки.

На небольшие степени двойки так проще всего умножать в уме, а на нечётные числа очень заморочено.

А потом придумали калькулятор

Не будешь же ты всегда таскать калькулятор с собой. (ц) Учитель математики

Всеобъемлющий сборник таблиц Брадиса.

а потом идёшь на рынок - и считаешь в уме, кто и на сколько тебя хочет обмануть (но, похоже, такие люди и сами обманываться рады, так что часто делают ошибки не в свою пользу)

Спасибо. Всегда были интересовался разными способами ариф. действий

В книге "Структура и интерпретация компьютерных программ" (SICP) этот метод назван "методом русского крестьянина".

Это алгоритм быстрого умножения (через сложение). Буквальный аналог быстрого возведения в степень (через умножения). Предназначен для тех, кто не знает таблицу умножения.

Чтобы умножать столбиком, нужно месяц учить таблицу умножения. А этот алгоритм можно освоить за несколько минут.

static long Power(long x, int n)
{
	var result = 1L;
	while (n > 0)
	{
		if ((n % 2) == 0)
		{
			x *= x;
			n /= 2;
		}
		else
		{
			result *= x;
			--n;
		}
	}

	return result;
}

В строках 8 и 13 заменяем умножение на сложение.

static long Mul(long x, int n)
{
	var result = 0L;
	while (n > 0)
	{
		if ((n % 2) == 0)
		{
			x += x;
			n /= 2;
		}
		else
		{
			result += x;
			--n;
		}
	}

	return result;
}

Судя по источникам, "Американский" в заголовке этой статьи - это неприличное обобщение, а "русский способ" - должно быть заключено в кавычки.

Интересный метод! Но не для применения, а для понимания, как можно смешать двоичную и десятичную системы счисления.

Ценность тут именно в том, что десятичная арифметика внезапно сводится к очень простым операциям

Умножать надо через FFT, так быстрее.

* каждый раз, когда вам приходится перемножать числа от гугола-в-тысячной.

Schönhage–Strassen ... asymptotically faster than older methods such as Karatsuba and Toom–Cook multiplication, and starts to outperform them in practice for numbers beyond about 10,000 to 100,000 decimal digits

А теперь мы вам расскажем, как быстро перемножить матрицы такого размера...

не понял )) объясните
7 * 41 = ?
7 | 41
3 | 82
1 | 164

164 + 41 = 205, а должно 287

Надо удалять строки, в которых есть четные ЗНАЧЕНИЯ, а не строки с четным номером. Здесь ни одного четного, поэтому ответ 41+82+164=287.

Можно также умножать на 11 - посредине сумма крайних цифр 11\cdot54 = 594 и прочие приёмы, чтобы свести к данным правилам, равно как для цифр, близких к 10 сложением-вычитанием (10+2) \cdot (10-2) как сумма-разность квадратов итд. Ну и конечно же log(a \cdot b)=log(a) + log(b)(логарифмическая линейка), включая поиск по LUT. То есть достаточно запомнить хотя бы 2,4,8,16...65536. Включая метод последовательных итераций с остатками от деления, метод Ньютона применимо к умножению и др. a \cdot b = c,a= {c \over b}, найти b приближающее дробь к a за минимум итераций.

конкретно с умножением на 9 первое что приходит в голову 27*10 - 27)

С девяткой много таких приёмов, она вообще "удобная" в десятичной системе

Вообще, приёмы умножения и проверки делимости хорошо переносятся на другие системы счисления, просто вместо 9 для системы счисления с основанием n аналогичный способ будет для умножения на (n-1).

"В правом столбце удваивайте число столько раз, сколько цифр содержит число в левом столбце"
Зачем вводить читателей в заблуждение? Так не работает. Умножаем 25 на 25

25 - 25
12 - 100 (удвоили дважды, потому как к левом столбце две цифры)
6 - 200
3 - 400
1 - 800

Ответ 800+400+25=1225. Да?

На самом деле удваивать надо всегда только один раз. Сам метод - хорошее упражнение для обучающихся программированию на инвариант цикла. Ну или для детей, изучающих математику - на индукцию. Доказывать удобнее, если представить, что сложение мы ведем по мере добавления строк и работаем с тройками чисел x, y, z. Вначале полагаем, что x и y наши множители, а z=0. Дальше делаем следующее:

  • при четном x уполовиниваем x, удваиваем y, переписываем z.

  • при нечетном x делаем то же, но дробную часть x отбрасываем, а z увеличиваем на y из предыдущей строки

Тогда в каждой строке x*y+z равно произведению первоначальных чисел. Поскольку в конце x=1, нам остается только подсчитать y+z. База индукции очевидна, шаг при четном x - тоже, шаг при нечетном x предоставляется читателю в качестве самостоятельного упражнения :)

Забавно, что метод знают под разными названиями, а суть у всех одна

вот это кстати идея. То есть представлять не цифры, а их заменители, позволяющие быстро считать. Например, треугольники, N-угольники и их пересечение, как некий код который можно преобразовать в число. Кстати интересный вопрос - есть ли не геометрическое доказательство что \lim_{x\to0} {sin(x) \over x} = 1

Правило Лопиталя

Да буквально по определению предела. Собственно, правило Лопиталя из такого действия по определению и выводится.

Какое-то время назад была статья о том, как доказывать теорему Пифагора каким-то неведомым простым способом) Эта, видимо, в продолжение)

похоже на старинные алгоритмы умножения для старых процов. "младшими разрядами вперëд" и "старшими разрядами вперед".

школьники такое изобретали во времена zx-spectrum через сдвиги, флаг переноса и сложение

Sign up to leave a comment.

Articles