Форум программистов, компьютерный форум CyberForum.ru

Модуль большого числа - C++

Восстановить пароль Регистрация
 
Pusichkaa
0 / 0 / 0
Регистрация: 29.11.2013
Сообщений: 13
17.03.2014, 18:26     Модуль большого числа #1
Доброго времени суток.
Вот такая проблема.
Имеется большое число, тип long double, нужно найти остаток от деления на 43, к примеру. (x%43)
Проблема в том, что для этого нужен целочисленный тип данных. Число слишком большое и оно вне пределов этого типа. Есть ли альтернатива этой операции в long double или есть другие способы нахождения остатка?
Спасибо.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4842 / 2981 / 367
Регистрация: 10.11.2010
Сообщений: 11,013
Записей в блоге: 10
Завершенные тесты: 1
17.03.2014, 18:53     Модуль большого числа #2
C++
1
2
3
4
...
long double denum = 43;
rem = fmod( numer, denum );
...
http://www.cplusplus.com/reference/cmath/fmod/
fishec
 Аватар для fishec
118 / 118 / 30
Регистрация: 07.09.2013
Сообщений: 337
17.03.2014, 18:59     Модуль большого числа #3
C++
1
2
    long double x = 430000000000001;
    cout << int(x - 43 * floor(x / 43.0)) << endl;
Pusichkaa
0 / 0 / 0
Регистрация: 29.11.2013
Сообщений: 13
17.03.2014, 19:57  [ТС]     Модуль большого числа #4
Цитата Сообщение от castaway Посмотреть сообщение
long double denum = 43;
rem = fmod( numer, denum );
При огромных числах метод работает некорректно.
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
17.03.2014, 19:59     Модуль большого числа #5
Цитата Сообщение от Pusichkaa Посмотреть сообщение
При огромных числах предложенные методы не работают.
А что именно не работает?
zss
Модератор
Эксперт С++
 Аватар для zss
5943 / 5548 / 1783
Регистрация: 18.12.2011
Сообщений: 14,170
Завершенные тесты: 1
17.03.2014, 20:03     Модуль большого числа #6
Цитата Сообщение от Pusichkaa Посмотреть сообщение
При огромных числах предложенные методы не работают.
Я бы сказал, что при огромных числах (больше чем 10 в степени "количество значащих цифр") такие действия некорректны,
т.к. после значащих цифр стоят незначащие нули. И какой тогда смысл получать остаток от деления?
castaway
Эксперт С++
4842 / 2981 / 367
Регистрация: 10.11.2010
Сообщений: 11,013
Записей в блоге: 10
Завершенные тесты: 1
17.03.2014, 20:05     Модуль большого числа #7
Цитата Сообщение от Pusichkaa Посмотреть сообщение
При огромных числах метод работает некорректно.
При каких - таких огромных? Как Вы его используете? Что значит "некорректно" ?
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
17.03.2014, 20:10     Модуль большого числа #8
Цитата Сообщение от zss Посмотреть сообщение
Я бы сказал, что при огромных числах (больше чем 10 в степени "количество значащих цифр") такие действия некорректны,
т.к. после значащих цифр стоят незначащие нули. И какой тогда смысл получать остаток от деления?
Точно все мы забыли про машинный "0".....

Добавлено через 4 минуты
8 байт эквивалентно примерно 16 цифрам, т.е. 100000000000000000=100000000000000001=100000000000000002 по-идеи не должен увидеть разницы компилятор
Pusichkaa
0 / 0 / 0
Регистрация: 29.11.2013
Сообщений: 13
17.03.2014, 20:14  [ТС]     Модуль большого числа #9
Цель задачи такова.
Составить программу, которая будет проверять и генерировать подпись RSA.
На проверку код есть, а вот с генерацией проблемы. В определенный момент там нужно посчитать
5^43 mod 77, вручную это подсчитать дело пары строк, а вот на коде проблемы. Пока что ничего не могу придумать =\
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
17.03.2014, 20:17     Модуль большого числа #10
Pusichkaa,
Вам надо создать свой собственный класс, который будет основан на "длинной арифметики". Стандартные типы Вам тут не помогут
fishec
 Аватар для fishec
118 / 118 / 30
Регистрация: 07.09.2013
Сообщений: 337
17.03.2014, 20:52     Модуль большого числа #11
Цитата Сообщение от Pusichkaa Посмотреть сообщение
там нужно посчитать
5^43 mod 77
Само число 5^43 нужно считать? или только остаток?
Pusichkaa
0 / 0 / 0
Регистрация: 29.11.2013
Сообщений: 13
17.03.2014, 20:57  [ТС]     Модуль большого числа #12
Цитата Сообщение от fishec Посмотреть сообщение
Само число 5^43 нужно считать? или только остаток?
Только остаток...тут я думаю уже алгоритмом только можно
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.03.2014, 20:59     Модуль большого числа
Еще ссылки по теме:

Факториал большого числа C++
C++ Вывод второго самого большого множителя числа N
C++ Взять корень из степени большого числа

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
fishec
 Аватар для fishec
118 / 118 / 30
Регистрация: 07.09.2013
Сообщений: 337
17.03.2014, 20:59     Модуль большого числа #13
Можно как-то так.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<iostream>
using namespace std;
int main()
{
    int a = 5;
    int n = 43;
    int c = 77;
    int ostatok = a;
    for (int i = 0; i < n-1; i++){
        ostatok = (ostatok * a) % c;
    }
    cout << ostatok << endl;
    system("pause");
    return 0;
}
Yandex
Объявления
17.03.2014, 20:59     Модуль большого числа
Ответ Создать тему
Опции темы

Текущее время: 12:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru