Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/18: Рейтинг темы: голосов - 18, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 16.06.2016
Сообщений: 10

Типы чисел: возвести число в степень и еще взять остаток от деления.

10.09.2017, 20:46. Показов 3761. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Делаю учебу (учусь дистанционно) и спросить не у кого, поэтому обращаюсь сюда. Помогите пожалуйста решить вопрос. Программа на C++.

Мне нужно возвести число в степень и еще взять остаток от деления. Уже часа два маюсь, никак не могу правильное число получить. Помогите пожалуйста. Очень странно работает программа, если Xa=1000, то функция работает нормально - результаты по Ya и bb выводятся правильные. Но если Xa=2000 - выдает какую-то чушь.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <math.h>
 
using namespace std;
 
int main()
{
    double Xa = 2000;
    double p = 30803;
    double g = 2;
    
    double Ya;
    
    Ya=pow(g, Xa);
    int bb= fmod(Ya, p);
    cout << "Ya=" << Ya << endl;
    cout << "bb=" << bb;
    return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.09.2017, 20:46
Ответы с готовыми решениями:

Как возвести число в целочисленную степень и взять корень N-ной степени?
извиняюсь, за ламерский вопрос, но как в C++ возвести число в целочисленную степень и взять корень N-ной степени??? Заранее благодарен!

Как возвести дробное число в целую степень? К примеру 2,7 возвести в степень 2 на C++.
Как возвести дробное число в целую степень? К примеру 2,7 возвести в степень 2 на C++.

Вывести остаток от деления НОД чисел F(i) и F(j) на 10^9. (F - Число Фибоначчи)
Последовательностью Фибоначчи называется последовательность чисел F0 = 0, F1 = 1, … , Fk = Fk-1 + Fk-2, (k &gt; 1). Требуется найти...

16
58 / 62 / 34
Регистрация: 14.03.2014
Сообщений: 933
10.09.2017, 21:14
Катрин-Катрин, ну дак double не вмещает такие большие числа
0
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
10.09.2017, 21:17
В 14 строке вы пытаетесь вычислить 22000, а это число слишком большое для типа double.

Самый простой способ обойти это ограничение - умножать число само на себя нужное число раз, каждый раз осуществляя деление по модулю 30803. Для уменьшения числа операций можно использовать алгоритм быстрого возведения в степень.

Статья в википедии: Возведение в степень по модулю
1
 Аватар для FreeYourMind
147 / 147 / 104
Регистрация: 13.11.2016
Сообщений: 557
10.09.2017, 21:31
Цитата Сообщение от Катрин-Катрин Посмотреть сообщение
Ya=pow(g, Xa);
а вы уверены что в double хватает диапазона допустимых значений на возведение 2 в 2000 степень?
0
0 / 0 / 0
Регистрация: 16.06.2016
Сообщений: 10
10.09.2017, 21:34  [ТС]
А какой тип мне тогда взять?

Добавлено через 1 минуту
Я вот тут посмотрела http://cppstudio.com/post/271/ , что тип double включает цифры до 9 млн., а у меня меньше выходит
0
58 / 62 / 34
Регистрация: 14.03.2014
Сообщений: 933
10.09.2017, 21:38
Катрин-Катрин, 2 в степени 2000 меньше 9 млн ??
0
0 / 0 / 0
Регистрация: 16.06.2016
Сообщений: 10
10.09.2017, 21:39  [ТС]
подскажите как исправить?

Добавлено через 22 секунды
Какой тип поставить?
0
58 / 62 / 34
Регистрация: 14.03.2014
Сообщений: 933
10.09.2017, 21:42
Катрин-Катрин, либо unsigned long long либо реализовывать на больших числах.
0
Неэпический
 Аватар для Croessmah
18146 / 10730 / 2066
Регистрация: 27.09.2012
Сообщений: 27,029
Записей в блоге: 1
10.09.2017, 21:46
Цитата Сообщение от Senarist Посмотреть сообщение
либо unsigned long long
Оно вместит 22000??
0
58 / 62 / 34
Регистрация: 14.03.2014
Сообщений: 933
10.09.2017, 21:47
Croessmah, нет конечно.
0
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
10.09.2017, 21:48
Цитата Сообщение от Катрин-Катрин Посмотреть сообщение
Какой тип поставить?
Замените double на long double, <math.h> на <cmath>. У меня получился верный результат.
0
0 / 0 / 0
Регистрация: 16.06.2016
Сообщений: 10
10.09.2017, 21:48  [ТС]
А если в градусы перевести? то как это сделать? я считала на инженерном калькуляторе виндоус, а он как раз считает в градусах
0
Неэпический
 Аватар для Croessmah
18146 / 10730 / 2066
Регистрация: 27.09.2012
Сообщений: 27,029
Записей в блоге: 1
10.09.2017, 21:52
Цитата Сообщение от Катрин-Катрин Посмотреть сообщение
взять остаток от деления
Если в лоб, то
22000 - это единица с последующими 1999 нулями в двоичной системе счисления.
Затем просто вычитать 30803 до тех пор, пока не останется число меньше 30803.
То есть для решения в лоб достаточно будет реализовать вычитание и сравнение длинных чисел.
0
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
10.09.2017, 21:57
Цитата Сообщение от Катрин-Катрин Посмотреть сообщение
А если в градусы перевести?
Зачем? Вы же не вычисляете синусы или косинусы.

Добавлено через 4 минуты
Croessmah, а где хранить промежуточный результат? В каком типе?
0
Велосипедист...
 Аватар для Mournful Max
353 / 220 / 73
Регистрация: 15.12.2015
Сообщений: 785
10.09.2017, 22:11
Цитата Сообщение от Croessmah Посмотреть сообщение
https://www.cyberforum.ru/cgi-bin/latex.cgi?{2}^{2000} - это единица с последующими 1999 нулями в двоичной системе счисления.
https://www.cyberforum.ru/cgi-bin/latex.cgi?{2}^{5} к примеру, — это 0010 0000. Так что https://www.cyberforum.ru/cgi-bin/latex.cgi?{2}^{2000} — єто единица с 2000 нулями
1
Неэпический
 Аватар для Croessmah
18146 / 10730 / 2066
Регистрация: 27.09.2012
Сообщений: 27,029
Записей в блоге: 1
10.09.2017, 22:38
Captain Maxee, да, точно.

Добавлено через 46 секунд
Цитата Сообщение от likehood Посмотреть сообщение
а где хранить промежуточный результат? В каком типе?
Там же где и не промежуточный. Например, в векторе.
0
1130 / 789 / 232
Регистрация: 12.04.2010
Сообщений: 2,012
11.09.2017, 01:02
Цитата Сообщение от Croessmah Посмотреть сообщение
22000 - это единица с последующими 1999 нулями в двоичной системе счисления.
Затем просто вычитать 30803 до тех пор, пока не останется число меньше 30803.
Croessmah, однако времени существования Вселенной не хватит, чтобы получить результат таким способом.
Цитата Сообщение от Катрин-Катрин Посмотреть сообщение
взять остаток от деления
C++
1
2
3
4
5
6
int N=2000, result=1;
for( int k=0; k<N; ++k)  // вычислим (2 в степени N) по модулю M
{
  result = result * 2;
  result = result % M;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.09.2017, 01:02
Помогаю со студенческими работами здесь

Если введенное число отрицательное и четное, то возвести его в 3 степень, иначе возвести в квадрат
Ввести целое число В. Если В отрицательное и четное, то возвести его в 3 степень, иначе возвести в квадрат

Степень двойки и остаток от деления
Цель: Возведите 2 в 75 степень, выведите остаток от деления полученного числа на 8^4-3 Входные данные: Нет входных данных Выходные...

Быстрое возведение в степень по mod (остаток от деления)
Доброго времени суток, форумчане! Не могли бы пояснить кусочек кода long long res = 1; while (pow) { if (pow &amp; 1) ...

Возвести во вторую степень число m/n , если его целая часть больше числа k, где k остаток от деления m на 5
Возвести во вторую степень число m/n , если его целая часть больше числа k, где k остаток от деления m на 5.

Возвести первое число в квадрат, а второе возвести в четвертую степень
С клавиатуры вводится два трёхзначных числа. Возвести первое число в квадрат, а второе возвести в четвертую степень, если хотя бы у одного...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru