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

Возведение в степень по модулю. Большие числа - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Эмуляция http://www.cyberforum.ru/cpp-beginners/thread847309.html
Написать функцию которая имеет на входе два числа с плавающей точкой типа float, но представленные как long int unsigned и выдает результат типа float сумма или разность третий операнд. Здравствуйте...
C++ Шаблоны функции Делаю задание по программированию, нужна явная специализация шаблона. Пишет ошибку: obj\Debug\main.o||In function `main':| C:\Users\sklad\Documents\CODEBLOCK\work8.6\main.cpp|16|undefined... http://www.cyberforum.ru/cpp-beginners/thread847289.html
const в конце объявления метода делает только *this константным? C++
То есть const в методе int foo(int x, int y) const; говорит, что внутри метода не будут переопределяться поля класса, а точнее const говорит, что *this будет константным? И на этом все?
C++ Дан массив размера N. Обнулить элементы массива, расположенные между его минимальным и максимальным элементами
помогите! ! ! работу нужно сделать в С++
C++ Поиск по базе в файле http://www.cyberforum.ru/cpp-beginners/thread847250.html
вот тут решил сделать базу данных в консоли смутил поиск ну не как он не хочет искать то что нужно помогите разобраться с этим поиском вот весь код базы может кому пригодиться... #include <stdio.h>...
C++ Проблемы с терминологией. Что такое : ключевые слова, спецификаторы, квалификаторы? Чаще всего встречаю только список ключевых слов, которые потом могут называться по другому, то есть в списке они ключевые слова почти все, но потом разные авторы называют их по разному, к примеру... подробнее

Показать сообщение отдельно
diagon
Higher
1930 / 1196 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
26.04.2013, 00:31
Как-то так.
Можно даже тип exp сменить на unsigned long long, все равно оно мгновенно считать будет за счет логарифмической сложности.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
unsigned powmod(unsigned base, unsigned exp, unsigned modulo)
{
    unsigned res = 1;
    
    while (exp != 0) 
    {
        if ((exp & 1) != 0)
        {
            res = (1ll * res * base) % modulo;
        }
        
        base = (1ll * base * base) % modulo;
        exp >>= 1;
    }
    
    return res;
}
Добавлено через 10 минут
Цитата Сообщение от diagon Посмотреть сообщение
(1ll * res * base)
Цитата Сообщение от diagon Посмотреть сообщение
(1ll * base * base)
Вот эту часть можно ускорить за счет лоулевельщины.
Для студии есть специальный интринсик. Для gcc аналога не нашел, так что надо либо надеяться на то, что он оптимизирует это самостоятельно, либо использовать asm-вставки.
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru