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

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

10.09.2017, 20:46. Показов 3776. Ответов 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,030
Записей в блоге: 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,030
Записей в блоге: 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,030
Записей в блоге: 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): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru