Форум программистов, компьютерный форум, киберфорум
Наши страницы

Остаток деления от числа фибоначчи - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Алгоритм игры Быки -коровы в С++ http://www.cyberforum.ru/cpp/thread13658.html
сложно ли реализовать алгоритм игры Быки -коровы в С++
C++ Делаем игру. Можете помочь? Знаю, что ваще не по теме, но нормальных программистов, кроме как на специальных форумах, как этот, мы найти нигде не можем. Короче, нужны программисты на C++. Наверняка среди вас есть люди, кто... http://www.cyberforum.ru/cpp/thread13641.html
Исходники асечного (ICQ) протокола C++
Народ, давно ищу одну вещь, решил создать ветку. У кого-нибудь есть исходники асечного (ICQ) протокола? Полностью рабочего. Нашел какую-то х... там отправка данных не работает... Поделитесь,...
C++ Пререзапуск сетевого адаптера
Вобщем пишу прогу для автоматической смены IP сетевого интерфейса. как сменить IP разобрался, делается очень просто в реестре, но после смены значения ключа конечно же нужен перезапуск подключения и...
C++ qsort, рабочий день убит... http://www.cyberforum.ru/cpp/thread12482.html
Всем привет, Я, наверное, представляться не буду :) Вообщем, один мой рабочий день на этой неделе был убит такой вещью: делал я задачку на сортировку строк в матрице. Решил делать через qsort....
C++ Сканеры исходные тексты Здравствуйте! Купил книгу по программированию, там приведены примеры двух сканеров, первый по UDP протоколу запрашивает snmp агент и получает ответ: 30 2F 02 01 00 04 06 70 75 62 6C 69 63 A2 22... подробнее

Показать сообщение отдельно
Lord_Voodoo
Супер-модератор
8596 / 2216 / 61
Регистрация: 07.03.2007
Сообщений: 10,775
Завершенные тесты: 1

Остаток деления от числа фибоначчи - C++

11.10.2008, 11:56. Просмотров 2228. Ответов 0
Метки (Все метки)

подскажите, как максимально минимизировать такой алгоритм:
Код
#include <iostream>
using namespace std;
const int N = 2;
void mult(long long a[N][N], long long b[N][N], long long res[N][N], long long d){
  long long c[N][N] = {0, 0, 0, 0};
  for(int i = 0; i < N; i++)
    for(int j = 0; j < N; j++){
      c[i][j] = 0;
      for(int k = 0; k < N; k++)
        c[i][j] = (c[i][j] + (a[i][k] % d)*(b[k][j] % d)) % d;
      c[i][j] = c[i][j] % d;
    }
  memmove(res, c, 4 * sizeof(long long));
}
int main()
{
    long long mp[N][N] = {0, 1, 1, 1};
    long long mr[N][N] = {1, 0, 0, 1};
    long long n, d;
    cin>>n>>d;
    if(n <= 2){
      cout<<1 % d;
      return 0;
    }
    while(n > 0){
      if((n & 1) == 0){
        mult(mp, mp, mp, d);
        n >>= 1;
      }
      n--;
      mult(mr, mp, mr, d);
    }
    cout<<mr[0][1]<<endl;
 return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru