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

Мультипликативно обратный элемент - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Создание горячих клавиш в windows http://www.cyberforum.ru/cpp-beginners/thread315218.html
господа програмисты если кто знает или у кого то есть код,подскажите как осуществить создание горячей клавиши? допустим я нажимаю f10-и показывается консольное окно с надписью "Hello!!!" (ну это не...
C++ Не могу понять в чем заключается ошибка. А. Создать файл, содержащий сведения о наличии билетов и рейсах, пункт назначениЯ, ВРЕМЯ ВЫЛЕТА,время прибытия, кол-во свободных мест в самолете. Количество записей- 25. Б.Найти время отправления... http://www.cyberforum.ru/cpp-beginners/thread315216.html
Кабздец C++
Даний масив цілих чисел. а) Усі елементи, що кінчаються цифрою 4, зменшити вдвічі. б) Усі парні елементи замінити на їхні квадрати, а непарні подвоїти. в) Парні елементи збільшити на а, а від...
C++ библиотека STL
Доброго всем дня) задача состоит в том, что рациональное число можно представить записью с двумя полями: числитель и знаменатель. Дан стек из N рациональных чисел. Создать новый список из дробей,...
C++ Списки http://www.cyberforum.ru/cpp-beginners/thread315203.html
Нужно создать однонаправленный список,для этого реализовать функции работы со списком: -добавление нового элемента; -вывод/удаление k-того элемента от текущей позиции влево; -вывод/удаление...
C++ Удаление из списка двух повторяющихся элементов Дан список из n целых чисел a1,a2,...an. Удалить из списка все элементы, входящие в него в точности два раза. #include <iostream.h> #include <conio.h> struct list { int info; ... подробнее

Показать сообщение отдельно
grizlik78
Эксперт С++
1967 / 1460 / 120
Регистрация: 29.05.2011
Сообщений: 3,019
07.06.2011, 20:51
Модифицировал алгоритм Евклида для данного конкретного модуля. Хотя возведение в степень может оказаться эффективнее. В общем спасибо за идею.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>
#include <stdint.h>
 
using namespace std;
 
uint64_t inverse_2_64(uint64_t x)
{
    if ( x < 2 )
        return x;
    uint64_t q = uint64_t(0 - x)/x + 1;
    uint64_t u1 = x;
    uint64_t u2 = 1;
    uint64_t v1 = (uint64_t)0 - q * x;
    uint64_t v2 = (uint64_t)0 - q;
    while (v1 != 0)
    {
        uint64_t q = u1 / v1;
        uint64_t t1 = u1 - q*v1;
        uint64_t t2 = u2 - q*v2;
        u1 = v1;
        u2 = v2;
        v1 = t1;
        v2 = t2;
    }
 
    return u1 == 1 ? u2 : 0;
}
 
int main()
{
    uint64_t a = 3;
    uint64_t b = inverse_2_64(a);
    if (b) {
        cout << a << "*" << b << "= 1 (mod 2**64)" << endl;
        cout << "direct multiplication: " << a * b << endl;
    }
    else
        cout << "'a' must be odd number" << endl;
    return 0;
}
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru