Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Алгоритмы > Возведение в степень с помщью операций умножения |
Автор: Verwolf 27.1.2012, 17:54 |
Подскажите, как можно решить эту задачу: Дано вещественное число а. Пользуясь только операцией умножения получить а^19 (а в 19й степени) за 5 операций. |
Автор: nworm 27.1.2012, 18:19 |
(a*a*a*...*a)*(a*a*...*a) както-то так там скобки надо расставить |
Автор: arcsupport 27.1.2012, 18:40 | ||
Вот, смотрите (FreePascal):
|
Автор: Lipetsk 30.1.2012, 08:37 |
да, за 5 операций никак ![]() |
Автор: ksnk 30.1.2012, 08:45 |
b=a*a ---(a^2) c=b*b ---(a^4) d=c*c ---(a^16) a^19=d*b*a 5 знаков умножения? |
Автор: Akina 30.1.2012, 09:04 |
не-а... a^8 |
Автор: disputant 30.1.2012, 09:37 |
См. том 2 Кнута, раздел 4.6.3, теорема B. Она утверждает, что минимально надо 6 умножений. Так что если кто сумеет за 5 - от Кнута ему следует 2.56$ ![]() |
Автор: Mirkes 30.1.2012, 09:38 |
Новое слово в математике a^4*a^4=a^16! Вообще говоря при умножении показатели степени складываются. Количество операций умножения можно легко посчитать по двоичному представлению показателя степени: 19=10011. То есть нужно 4 операции для получения 16 степени и еще две для добавления 3 степени. Можно попробовать другой вариант 1. a^2 2. a^4 3. a^5 4. a^10 5. a^20 6. a^19 Но это все равно 6 операций. Скорее всего можно доказать что 19 степень за 5 операций поучить нельзя. Попробуем доказать. Применяя операцю умножения можно получить только сумму степеней сомножителей. При этом очевидным максимумом является удвоение степени, когда оба сомножителя являются одинаковой степенью исходного числа. Рассмотрим двоичное представление степени. Число разрядов -1 плюс число единиц во всех разрядах кроме старшего - это минимальное число операций, необходимое для вычисления нужной степени. Доказательство. Поскольку максимальная степень, полученная на очередном шаге есть удвоенная степень предыдущего шага, то минимальное число шагов для получения степени 2^k есть k. Таким образом для получения степени 16 необходимо как минимум 4 шага. За один шаг можно добавить либо ноль в двоичную запись степени (удвоить степень) либо одну единицу в любой разряд кроме старшего. Нужно добавить две единицы. Номер не пройдет. Доказательство не совсем строгое, но думаю вполне достаточное. Можно получить 17, 18, 20, 24, 32 степени, но никак не 19. Забавно, но для получения 15 степени потребуется тоже 6 операций. За пять операций можно получить следующие степени (это полный список) 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 20, 24, 32 |
Автор: disputant 30.1.2012, 10:05 | ||
Нет, неполный... y=x*x*x - 2 умножения z = y*y (x^6) 1 умножениt t = z*z*y (x^15) 2 умножения Так что 15 тоже можно за 5 умножений |
Автор: Akina 1.2.2012, 19:31 |
Нет, ещё одно открытие - это что даёт 2 степень... |
Автор: Mirkes 2.2.2012, 06:44 | ||||||
Ладно, лоханулся. Но вообще говоря писать надо акуратней, во всех строчках сначала идет степень, а в этой сразу число операций. Стереотип восприятия ![]() в качестве компенсации написал программку, которая вычисляет ВСЕ степени с указанием ВСЕХ вариантов получения каждой степени
Вот результаты ее работы для числа операций от 1 до 5. Дальше не гонял. В конце двоичное представление степени для проверки моей гипотезы по доказательству. Гипотеза провалилась :( WholeDegree 1 p2=p1*p1 10 WholeDegree 2 p3=p1*p2; p2=p1*p1 11 p4=p2*p2; p2=p1*p1 100 WholeDegree 3 p4=p1*p3; p3=p1*p2; p2=p1*p1 100 p5=p2*p3; p3=p1*p2; p2=p1*p1 101 p5=p1*p4; p4=p2*p2; p2=p1*p1 101 p6=p3*p3; p3=p1*p2; p2=p1*p1 110 p6=p2*p4; p4=p2*p2; p2=p1*p1 110 p8=p4*p4; p4=p2*p2; p2=p1*p1 1000 WholeDegree 4 p5=p1*p4; p4=p1*p3; p3=p1*p2; p2=p1*p1 101 p6=p1*p5; p5=p1*p4; p4=p2*p2; p2=p1*p1 110 p6=p1*p5; p5=p2*p3; p3=p1*p2; p2=p1*p1 110 p6=p2*p4; p4=p1*p3; p3=p1*p2; p2=p1*p1 110 p7=p1*p6; p6=p2*p4; p4=p2*p2; p2=p1*p1 111 p7=p1*p6; p6=p3*p3; p3=p1*p2; p2=p1*p1 111 p7=p2*p5; p5=p1*p4; p4=p2*p2; p2=p1*p1 111 p7=p2*p5; p5=p2*p3; p3=p1*p2; p2=p1*p1 111 p7=p3*p4; p4=p1*p3; p3=p1*p2; p2=p1*p1 111 p7=p3*p4; p4=p2*p2; p3=p1*p2; p2=p1*p1 111 p8=p2*p6; p6=p2*p4; p4=p2*p2; p2=p1*p1 1000 p8=p2*p6; p6=p3*p3; p3=p1*p2; p2=p1*p1 1000 p8=p3*p5; p5=p2*p3; p3=p1*p2; p2=p1*p1 1000 p8=p4*p4; p4=p1*p3; p3=p1*p2; p2=p1*p1 1000 p9=p1*p8; p8=p4*p4; p4=p2*p2; p2=p1*p1 1001 p9=p3*p6; p6=p3*p3; p3=p1*p2; p2=p1*p1 1001 p9=p4*p5; p5=p1*p4; p4=p2*p2; p2=p1*p1 1001 p10=p2*p8; p8=p4*p4; p4=p2*p2; p2=p1*p1 1010 p10=p4*p6; p6=p2*p4; p4=p2*p2; p2=p1*p1 1010 p10=p5*p5; p5=p1*p4; p4=p2*p2; p2=p1*p1 1010 p10=p5*p5; p5=p2*p3; p3=p1*p2; p2=p1*p1 1010 p12=p4*p8; p8=p4*p4; p4=p2*p2; p2=p1*p1 1100 p12=p6*p6; p6=p2*p4; p4=p2*p2; p2=p1*p1 1100 p12=p6*p6; p6=p3*p3; p3=p1*p2; p2=p1*p1 1100 p16=p8*p8; p8=p4*p4; p4=p2*p2; p2=p1*p1 10000 WholeDegree 5 p6=p1*p5; p5=p1*p4; p4=p1*p3; p3=p1*p2; p2=p1*p1 110 p7=p1*p6; p6=p1*p5; p5=p1*p4; p4=p2*p2; p2=p1*p1 111 p7=p1*p6; p6=p1*p5; p5=p2*p3; p3=p1*p2; p2=p1*p1 111 p7=p1*p6; p6=p2*p4; p4=p1*p3; p3=p1*p2; p2=p1*p1 111 p7=p2*p5; p5=p1*p4; p4=p1*p3; p3=p1*p2; p2=p1*p1 111 p8=p1*p7; p7=p1*p6; p6=p2*p4; p4=p2*p2; p2=p1*p1 1000 p8=p1*p7; p7=p1*p6; p6=p3*p3; p3=p1*p2; p2=p1*p1 1000 p8=p1*p7; p7=p2*p5; p5=p1*p4; p4=p2*p2; p2=p1*p1 1000 p8=p1*p7; p7=p2*p5; p5=p2*p3; p3=p1*p2; p2=p1*p1 1000 p8=p1*p7; p7=p3*p4; p4=p1*p3; p3=p1*p2; p2=p1*p1 1000 p8=p1*p7; p7=p3*p4; p4=p2*p2; p3=p1*p2; p2=p1*p1 1000 p8=p2*p6; p6=p1*p5; p5=p1*p4; p4=p2*p2; p2=p1*p1 1000 p8=p2*p6; p6=p1*p5; p5=p2*p3; p3=p1*p2; p2=p1*p1 1000 p8=p2*p6; p6=p2*p4; p4=p1*p3; p3=p1*p2; p2=p1*p1 1000 p8=p3*p5; p5=p1*p4; p4=p1*p3; p3=p1*p2; p2=p1*p1 1000 p8=p3*p5; p5=p1*p4; p4=p2*p2; p3=p1*p2; p2=p1*p1 1000 p8=p4*p4; p4=p1*p3; p4=p2*p2; p3=p1*p2; p2=p1*p1 1000 p9=p1*p8; p8=p2*p6; p6=p2*p4; p4=p2*p2; p2=p1*p1 1001 p9=p1*p8; p8=p2*p6; p6=p3*p3; p3=p1*p2; p2=p1*p1 1001 p9=p1*p8; p8=p3*p5; p5=p2*p3; p3=p1*p2; p2=p1*p1 1001 p9=p1*p8; p8=p4*p4; p4=p1*p3; p3=p1*p2; p2=p1*p1 1001 p9=p2*p7; p7=p1*p6; p6=p2*p4; p4=p2*p2; p2=p1*p1 1001 p9=p2*p7; p7=p1*p6; p6=p3*p3; p3=p1*p2; p2=p1*p1 1001 p9=p2*p7; p7=p2*p5; p5=p1*p4; p4=p2*p2; p2=p1*p1 1001 p9=p2*p7; p7=p2*p5; p5=p2*p3; p3=p1*p2; p2=p1*p1 1001 p9=p2*p7; p7=p3*p4; p4=p1*p3; p3=p1*p2; p2=p1*p1 1001 p9=p2*p7; p7=p3*p4; p4=p2*p2; p3=p1*p2; p2=p1*p1 1001 p9=p3*p6; p6=p1*p5; p5=p2*p3; p3=p1*p2; p2=p1*p1 1001 p9=p3*p6; p6=p2*p4; p4=p1*p3; p3=p1*p2; p2=p1*p1 1001 p9=p3*p6; p6=p2*p4; p4=p2*p2; p3=p1*p2; p2=p1*p1 1001 p9=p4*p5; p5=p1*p4; p4=p1*p3; p3=p1*p2; p2=p1*p1 1001 p9=p4*p5; p5=p2*p3; p4=p1*p3; p3=p1*p2; p2=p1*p1 1001 p9=p4*p5; p5=p2*p3; p4=p2*p2; p3=p1*p2; p2=p1*p1 1001 p10=p1*p9; p9=p1*p8; p8=p4*p4; p4=p2*p2; p2=p1*p1 1010 p10=p1*p9; p9=p3*p6; p6=p3*p3; p3=p1*p2; p2=p1*p1 1010 p10=p1*p9; p9=p4*p5; p5=p1*p4; p4=p2*p2; p2=p1*p1 1010 p10=p2*p8; p8=p2*p6; p6=p2*p4; p4=p2*p2; p2=p1*p1 1010 p10=p2*p8; p8=p2*p6; p6=p3*p3; p3=p1*p2; p2=p1*p1 1010 p10=p2*p8; p8=p3*p5; p5=p2*p3; p3=p1*p2; p2=p1*p1 1010 p10=p2*p8; p8=p4*p4; p4=p1*p3; p3=p1*p2; p2=p1*p1 1010 p10=p3*p7; p7=p1*p6; p6=p3*p3; p3=p1*p2; p2=p1*p1 1010 p10=p3*p7; p7=p2*p5; p5=p2*p3; p3=p1*p2; p2=p1*p1 1010 p10=p3*p7; p7=p3*p4; p4=p1*p3; p3=p1*p2; p2=p1*p1 1010 p10=p3*p7; p7=p3*p4; p4=p2*p2; p3=p1*p2; p2=p1*p1 1010 p10=p4*p6; p6=p1*p5; p5=p1*p4; p4=p2*p2; p2=p1*p1 1010 p10=p4*p6; p6=p2*p4; p4=p1*p3; p3=p1*p2; p2=p1*p1 1010 p10=p4*p6; p6=p3*p3; p4=p1*p3; p3=p1*p2; p2=p1*p1 1010 p10=p4*p6; p6=p3*p3; p4=p2*p2; p3=p1*p2; p2=p1*p1 1010 p10=p5*p5; p5=p1*p4; p4=p1*p3; p3=p1*p2; p2=p1*p1 1010 p11=p1*p10; p10=p2*p8; p8=p4*p4; p4=p2*p2; p2=p1*p1 1011 p11=p1*p10; p10=p4*p6; p6=p2*p4; p4=p2*p2; p2=p1*p1 1011 p11=p1*p10; p10=p5*p5; p5=p1*p4; p4=p2*p2; p2=p1*p1 1011 p11=p1*p10; p10=p5*p5; p5=p2*p3; p3=p1*p2; p2=p1*p1 1011 p11=p2*p9; p9=p1*p8; p8=p4*p4; p4=p2*p2; p2=p1*p1 1011 p11=p2*p9; p9=p3*p6; p6=p3*p3; p3=p1*p2; p2=p1*p1 1011 p11=p2*p9; p9=p4*p5; p5=p1*p4; p4=p2*p2; p2=p1*p1 1011 p11=p3*p8; p8=p2*p6; p6=p3*p3; p3=p1*p2; p2=p1*p1 1011 p11=p3*p8; p8=p3*p5; p5=p2*p3; p3=p1*p2; p2=p1*p1 1011 p11=p3*p8; p8=p4*p4; p4=p1*p3; p3=p1*p2; p2=p1*p1 1011 p11=p3*p8; p8=p4*p4; p4=p2*p2; p3=p1*p2; p2=p1*p1 1011 p11=p4*p7; p7=p1*p6; p6=p2*p4; p4=p2*p2; p2=p1*p1 1011 p11=p4*p7; p7=p2*p5; p5=p1*p4; p4=p2*p2; p2=p1*p1 1011 p11=p4*p7; p7=p3*p4; p4=p1*p3; p3=p1*p2; p2=p1*p1 1011 p11=p4*p7; p7=p3*p4; p4=p2*p2; p3=p1*p2; p2=p1*p1 1011 p11=p5*p6; p6=p1*p5; p5=p1*p4; p4=p2*p2; p2=p1*p1 1011 p11=p5*p6; p6=p1*p5; p5=p2*p3; p3=p1*p2; p2=p1*p1 1011 p11=p5*p6; p6=p2*p4; p5=p1*p4; p4=p2*p2; p2=p1*p1 1011 p11=p5*p6; p6=p3*p3; p5=p2*p3; p3=p1*p2; p2=p1*p1 1011 p12=p2*p10; p10=p2*p8; p8=p4*p4; p4=p2*p2; p2=p1*p1 1100 p12=p2*p10; p10=p4*p6; p6=p2*p4; p4=p2*p2; p2=p1*p1 1100 p12=p2*p10; p10=p5*p5; p5=p1*p4; p4=p2*p2; p2=p1*p1 1100 p12=p2*p10; p10=p5*p5; p5=p2*p3; p3=p1*p2; p2=p1*p1 1100 p12=p3*p9; p9=p3*p6; p6=p3*p3; p3=p1*p2; p2=p1*p1 1100 p12=p4*p8; p8=p2*p6; p6=p2*p4; p4=p2*p2; p2=p1*p1 1100 p12=p4*p8; p8=p4*p4; p4=p1*p3; p3=p1*p2; p2=p1*p1 1100 p12=p5*p7; p7=p2*p5; p5=p1*p4; p4=p2*p2; p2=p1*p1 1100 p12=p5*p7; p7=p2*p5; p5=p2*p3; p3=p1*p2; p2=p1*p1 1100 p12=p6*p6; p6=p1*p5; p5=p1*p4; p4=p2*p2; p2=p1*p1 1100 p12=p6*p6; p6=p1*p5; p5=p2*p3; p3=p1*p2; p2=p1*p1 1100 p12=p6*p6; p6=p2*p4; p4=p1*p3; p3=p1*p2; p2=p1*p1 1100 p13=p1*p12; p12=p4*p8; p8=p4*p4; p4=p2*p2; p2=p1*p1 1101 p13=p1*p12; p12=p6*p6; p6=p2*p4; p4=p2*p2; p2=p1*p1 1101 p13=p1*p12; p12=p6*p6; p6=p3*p3; p3=p1*p2; p2=p1*p1 1101 p13=p3*p10; p10=p5*p5; p5=p2*p3; p3=p1*p2; p2=p1*p1 1101 p13=p4*p9; p9=p1*p8; p8=p4*p4; p4=p2*p2; p2=p1*p1 1101 p13=p4*p9; p9=p4*p5; p5=p1*p4; p4=p2*p2; p2=p1*p1 1101 p13=p5*p8; p8=p3*p5; p5=p2*p3; p3=p1*p2; p2=p1*p1 1101 p13=p5*p8; p8=p4*p4; p5=p1*p4; p4=p2*p2; p2=p1*p1 1101 p13=p6*p7; p7=p1*p6; p6=p2*p4; p4=p2*p2; p2=p1*p1 1101 p13=p6*p7; p7=p1*p6; p6=p3*p3; p3=p1*p2; p2=p1*p1 1101 p14=p2*p12; p12=p4*p8; p8=p4*p4; p4=p2*p2; p2=p1*p1 1110 p14=p2*p12; p12=p6*p6; p6=p2*p4; p4=p2*p2; p2=p1*p1 1110 p14=p2*p12; p12=p6*p6; p6=p3*p3; p3=p1*p2; p2=p1*p1 1110 p14=p4*p10; p10=p2*p8; p8=p4*p4; p4=p2*p2; p2=p1*p1 1110 p14=p4*p10; p10=p4*p6; p6=p2*p4; p4=p2*p2; p2=p1*p1 1110 p14=p4*p10; p10=p5*p5; p5=p1*p4; p4=p2*p2; p2=p1*p1 1110 p14=p5*p9; p9=p4*p5; p5=p1*p4; p4=p2*p2; p2=p1*p1 1110 p14=p6*p8; p8=p2*p6; p6=p2*p4; p4=p2*p2; p2=p1*p1 1110 p14=p6*p8; p8=p2*p6; p6=p3*p3; p3=p1*p2; p2=p1*p1 1110 p14=p6*p8; p8=p4*p4; p6=p2*p4; p4=p2*p2; p2=p1*p1 1110 p14=p7*p7; p7=p1*p6; p6=p2*p4; p4=p2*p2; p2=p1*p1 1110 p14=p7*p7; p7=p1*p6; p6=p3*p3; p3=p1*p2; p2=p1*p1 1110 p14=p7*p7; p7=p2*p5; p5=p1*p4; p4=p2*p2; p2=p1*p1 1110 p14=p7*p7; p7=p2*p5; p5=p2*p3; p3=p1*p2; p2=p1*p1 1110 p14=p7*p7; p7=p3*p4; p4=p1*p3; p3=p1*p2; p2=p1*p1 1110 p14=p7*p7; p7=p3*p4; p4=p2*p2; p3=p1*p2; p2=p1*p1 1110 p15=p3*p12; p12=p6*p6; p6=p3*p3; p3=p1*p2; p2=p1*p1 1111 p15=p5*p10; p10=p5*p5; p5=p1*p4; p4=p2*p2; p2=p1*p1 1111 p15=p5*p10; p10=p5*p5; p5=p2*p3; p3=p1*p2; p2=p1*p1 1111 p15=p6*p9; p9=p3*p6; p6=p3*p3; p3=p1*p2; p2=p1*p1 1111 p16=p4*p12; p12=p4*p8; p8=p4*p4; p4=p2*p2; p2=p1*p1 10000 p16=p4*p12; p12=p6*p6; p6=p2*p4; p4=p2*p2; p2=p1*p1 10000 p16=p6*p10; p10=p4*p6; p6=p2*p4; p4=p2*p2; p2=p1*p1 10000 p16=p8*p8; p8=p2*p6; p6=p2*p4; p4=p2*p2; p2=p1*p1 10000 p16=p8*p8; p8=p2*p6; p6=p3*p3; p3=p1*p2; p2=p1*p1 10000 p16=p8*p8; p8=p3*p5; p5=p2*p3; p3=p1*p2; p2=p1*p1 10000 p16=p8*p8; p8=p4*p4; p4=p1*p3; p3=p1*p2; p2=p1*p1 10000 p17=p1*p16; p16=p8*p8; p8=p4*p4; p4=p2*p2; p2=p1*p1 10001 p17=p8*p9; p9=p1*p8; p8=p4*p4; p4=p2*p2; p2=p1*p1 10001 p18=p2*p16; p16=p8*p8; p8=p4*p4; p4=p2*p2; p2=p1*p1 10010 p18=p6*p12; p12=p6*p6; p6=p2*p4; p4=p2*p2; p2=p1*p1 10010 p18=p6*p12; p12=p6*p6; p6=p3*p3; p3=p1*p2; p2=p1*p1 10010 p18=p8*p10; p10=p2*p8; p8=p4*p4; p4=p2*p2; p2=p1*p1 10010 p18=p9*p9; p9=p1*p8; p8=p4*p4; p4=p2*p2; p2=p1*p1 10010 p18=p9*p9; p9=p3*p6; p6=p3*p3; p3=p1*p2; p2=p1*p1 10010 p18=p9*p9; p9=p4*p5; p5=p1*p4; p4=p2*p2; p2=p1*p1 10010 p20=p10*p10; p10=p2*p8; p8=p4*p4; p4=p2*p2; p2=p1*p1 10100 p20=p10*p10; p10=p4*p6; p6=p2*p4; p4=p2*p2; p2=p1*p1 10100 p20=p10*p10; p10=p5*p5; p5=p1*p4; p4=p2*p2; p2=p1*p1 10100 p20=p10*p10; p10=p5*p5; p5=p2*p3; p3=p1*p2; p2=p1*p1 10100 p20=p4*p16; p16=p8*p8; p8=p4*p4; p4=p2*p2; p2=p1*p1 10100 p20=p8*p12; p12=p4*p8; p8=p4*p4; p4=p2*p2; p2=p1*p1 10100 p24=p12*p12; p12=p4*p8; p8=p4*p4; p4=p2*p2; p2=p1*p1 11000 p24=p12*p12; p12=p6*p6; p6=p2*p4; p4=p2*p2; p2=p1*p1 11000 p24=p12*p12; p12=p6*p6; p6=p3*p3; p3=p1*p2; p2=p1*p1 11000 p24=p8*p16; p16=p8*p8; p8=p4*p4; p4=p2*p2; p2=p1*p1 11000 p32=p16*p16; p16=p8*p8; p8=p4*p4; p4=p2*p2; p2=p1*p1 100000 |