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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Pusichkaa
0 / 0 / 0
Регистрация: 29.11.2013
Сообщений: 13
#1

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

17.03.2014, 18:26. Просмотров 685. Ответов 12
Метки нет (Все метки)

Доброго времени суток.
Вот такая проблема.
Имеется большое число, тип long double, нужно найти остаток от деления на 43, к примеру. (x%43)
Проблема в том, что для этого нужен целочисленный тип данных. Число слишком большое и оно вне пределов этого типа. Есть ли альтернатива этой операции в long double или есть другие способы нахождения остатка?
Спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.03.2014, 18:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Модуль большого числа (C++):

1% от большого числа - C++
Вводится число 10^6<=N<=10^200 Надо вывести 1% от него. Кто-нибудь может это решить, я очень много времени потратил...

Деление большого числа - C++
Суть такова: Реализовываю класс для системы остаточных классов, нужно считать большое число ( допустим больше 20 знаков), понятное дело что...

Факториал большого числа - C++
Доброго времени суток! Захотелось вычислить факториал большого числа. Наткнулся на gmp. Посмотрел это...

Вычисление факториала большого числа - C++
написать программу, которая вычисляла бы факториал заданного большого числа, например 500, и результат вычислений с точностью до единицы...

Взять корень из степени большого числа - C++
Всем привет задачакая с помощью библиотеки math.h и функции pow() нужно взять корень степени числа. код написанн но проблема в том что...

Возведение большого числа в большую степень - C++
Появился вопрос. Реализовую алгоритм Диффи — Хеллмана и не могу возвести 300-значное число в 100-значную степень). Делать циклом - вообще...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 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
119 / 119 / 30
Регистрация: 07.09.2013
Сообщений: 338
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
Модератор
Эксперт С++
6355 / 5919 / 1919
Регистрация: 18.12.2011
Сообщений: 15,215
Завершенные тесты: 1
17.03.2014, 20:03 #6
Цитата Сообщение от Pusichkaa Посмотреть сообщение
При огромных числах предложенные методы не работают.
Я бы сказал, что при огромных числах (больше чем 10 в степени "количество значащих цифр") такие действия некорректны,
т.к. после значащих цифр стоят незначащие нули. И какой тогда смысл получать остаток от деления?
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 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
119 / 119 / 30
Регистрация: 07.09.2013
Сообщений: 338
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 нужно считать? или только остаток?
Только остаток...тут я думаю уже алгоритмом только можно
fishec
119 / 119 / 30
Регистрация: 07.09.2013
Сообщений: 338
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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.03.2014, 20:59
Привет! Вот еще темы с ответами:

Последняя цифра большого числа Фибоначчи - C++
Помогите разобраться. Вроде все правильно и ответ правильный, но процесс решения не правильный. Не могу понять, что не так. Уже третий день...

Вывод второго самого большого множителя числа N - C++
Доброго времени суток. Задание в том что, надо вывести второй самый большой множитель числа N. Например если я ввожу 48, то ответ...

Извлечь любой корень из любого большого числа - C++
нужно разработать Windows-приложение для извлечения любого корня из любого большого числа. как бы функционал sqrt ограничен, как быть со...

длинная арифметика. Умножение большого числа на малое - C++
Столкнулся с небольшой проблемой: при умножении большого числа (примерно 9 знаков) на небольшое выводит непонятно что, но с малыми числами...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
17.03.2014, 20:59
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru