Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
операций умножения машинных слов. На каждой итерации выполняются 4 операции «длинного» умножения, т.е. сложность одной итерации равна
простых операций умножения. Для числа
по моему алгоритму будет выполнено m — 1 итераций. Можно допустить, что на каждой итерации размерность операндов у нас будет расти вдвое. Общая сложность всех итераций равна 


. Но
, поэтому итоговая асимптотика равна
операций умножения машинных слов.
(где k — порядковый номер числа фибоначчи на текущей итерации), то сложность итерации будет равна
. Сложность всех итераций равна
. Асимптотика получается
, что все равно лучше, чем ваша оценка
. К тому же для умножения можно использовать более эффективные алгоритмы.unsigned multiply(unsigned* big_number, unsigned number_size, unsigned multiplier)
{
unsigned overflow;
__asm {
mov edi, big_number
mov ebx, multiplier
mov ecx, number_size
xor esi, esi
begin_loop:
mov eax, [edi]
mul ebx
add eax, esi
mov esi, edx
mov [edi], eax
add edi, 1
sub ecx, 1
jnz begin_loop
mov overflow, esi
}
return overflow;
}
void print_number(unsigned int* number, unsigned int number_size, int leading_zeros)
{
for(; number_size--;) {
if (!number[number_size]) {
if (leading_zeros)
printf("%08x", 0);
} else {
if (leading_zeros)
printf("%08x", number[number_size]);
else
printf("%x", number[number_size]);
for(; number_size--;)
printf("%08x", number[number_size]);
break;
}
}
}
Еще один алгоритм вычисления чисел Фибоначчи