Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.62/47: Рейтинг темы: голосов - 47, средняя оценка - 4.62
 Аватар для Eisenstein
2 / 2 / 0
Регистрация: 28.06.2021
Сообщений: 35
Записей в блоге: 1

Обратное число

14.07.2021, 19:26. Показов 10171. Ответов 35
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Обратное число
В этой задаче нужно ответить на 1≤t≤105 запросов. Каждый запрос состоит из двух целых чисел 2≤p≤109 и 0<a<p, число p является простым. На каждый запрос нужно вывести в отдельной строке целое число 0<b<p такое, что (a⋅b−1) ⋮ p.

Входные данные

В первой строке дано целое число t — количество запросов.

В следующих t строках даны по два числа pi и ai, i=1,…,t.

Выходные данные

Выведите t целых чисел (каждое число в отдельной строке) — ответы на запросы.

Примеры
Ввод
4
5 1
5 2
5 3
5 4
Вывод
1
3
2
4
Время выполнения 5 секунд.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
int main()
{
    int t, a, p;
    cin >> t;
    int* s = new int[t];
    for (int i = 0; i < t; i++)
    {
        cin >> p >> a;
        b = 1;
        while ((a * b - 1) % p != 0)
        {
            b++;
        }
        s[i] = b;
    }
    for (int i = 0; i < t; i++)
    cout << s[i] << endl;
}
Ну и я не знаю как по-другому написать алгоритм, чтобы выполнялся за 5 сек. Помогите, пожалуйста
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.07.2021, 19:26
Ответы с готовыми решениями:

Обратное число
В этой задаче нужно ответить на 1≤t≤105 запросов. Каждый запрос состоит из двух целых чисел 2≤p≤109 и 0&lt;a&lt;p, число p является...

Обратное число
Совсем недавно начала изучать C++, и эта задача вызвала у меня затруднения. Помогите решить, пожалуйста. В этой задаче нужно...

Получить обратное число
3-ввести 3-х значное число допустим 741 получить обратное 147

35
 Аватар для LegionK
393 / 263 / 193
Регистрация: 02.05.2017
Сообщений: 1,003
15.07.2021, 19:43
Студворк — интернет-сервис помощи студентам
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <cmath>
 
using namespace std;
 
#define ll long long
 
ll binpow(ll a,ll n,ll p) {
 
    if(!n)return 1;
    if(n % 2)return ((binpow(a,n-1,p) * a)%p);
    else{
 
        ll b = (binpow(a, n/2,p))%p;
 
        return ((b * b)%p);
    }
}
 
 
int main()
{
    ll z;
    cin >> z;
 
    for(ll zz = 0;zz<z;++zz){
 
        ll p,a;
        cin >> p >> a;
 
        cout << binpow(a,p-2,p) << "\n";
 
    }
 
 
 
    return 0;
}


Попробуйте.
2
 Аватар для Eisenstein
2 / 2 / 0
Регистрация: 28.06.2021
Сообщений: 35
Записей в блоге: 1
15.07.2021, 19:53  [ТС]
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
#include <iostream>
using namespace std;
 
int binpow(int a, int n) {
    if (n == 0)
        return 1;
    if (n % 2 == 1)
        return binpow(a, n - 1) * a;
    else {
        int b = binpow(a, n / 2);
        return b * b;
    }
}
 
 
int main()
{
    long long t, s, y, a, p;
    cin >> t;
    int* g = new int[t];
    for (int i = 0; i < t; i++)
    {
        cin >> p >> a;
        y = binpow(a, p - 2);
        s = y % p;
        g[i] = s;
 
    }
 
    for (int i = 0; i < t; i++)
        cout << g[i] << endl;
}
Сделала недавно вот это, но на проверке пишет, что программа выдаёт неверный ответ. Что в ней не так?

Добавлено через 8 минут
Цитата Сообщение от LegionK Посмотреть сообщение
Попробуйте.
Я не очень понимаю, как она работает. Может она и пройдёт тест, но я её не понимаю
0
 Аватар для LegionK
393 / 263 / 193
Регистрация: 02.05.2017
Сообщений: 1,003
15.07.2021, 19:56
Цитата Сообщение от Eisenstein Посмотреть сообщение
как она работает.
Мне это очень интересно. Давайте вы отправите и мне расскажите о результате? Я буду вам очень благодарен в любом случае.
0
 Аватар для Eisenstein
2 / 2 / 0
Регистрация: 28.06.2021
Сообщений: 35
Записей в блоге: 1
15.07.2021, 19:59  [ТС]
Цитата Сообщение от LegionK Посмотреть сообщение
Давайте вы отправите и мне расскажите о результате?
Она прошла
0
 Аватар для LegionK
393 / 263 / 193
Регистрация: 02.05.2017
Сообщений: 1,003
15.07.2021, 20:00
Цитата Сообщение от Eisenstein Посмотреть сообщение
Она прошла
Спасибо вам большое.
0
 Аватар для Eisenstein
2 / 2 / 0
Регистрация: 28.06.2021
Сообщений: 35
Записей в блоге: 1
15.07.2021, 20:01  [ТС]
Цитата Сообщение от LegionK Посмотреть сообщение
Спасибо вам большое.
Да, но мне от этого мало толку. Я то ничего почти не поняла. Но спасибо
0
 Аватар для LegionK
393 / 263 / 193
Регистрация: 02.05.2017
Сообщений: 1,003
15.07.2021, 20:20
Лучший ответ Сообщение было отмечено Eisenstein как решение

Решение

Цитата Сообщение от Eisenstein Посмотреть сообщение
Я то ничего почти не поняла
Вы смогли разобраться в алгоритме бинарного возведения в степень? Того самого, код которого мы с вами скопировали с emaxx? Предположим мы хотим возвести число a в степень b. Если степень b четная, то a^b = a^(b/2) * a^(b/2). Если b нечетная, то a^b = a*a^(b-1). Где b-1 уже четное число для которого мы применим прошлый шаг. Представьте это как такую цепочку : сначала стоит b, потом стоит b-1, потом стоит (b-1)/2 и т.д и так пока не дойдет до 0. Когда a^0 = 1. Всего от b до 0 цепочка будет длины чуть меньше 2*log(2,n). Это если на каждом шаге мы сначала вычитаем единицу, а потом делим на два. То есть log(2,n) (- из определения) делений на два, столько же вычитаний.

Теперь предположим мы хотим найти не a^b, а a^b mod p. Здесь будет абсолютно то же самое, т.к

(a^b) % p = ((a^(b/2)%p) * (a^(b/2)%p)) % p

И для нечетных b : (a^b)%p = (a * (a^(b-1)%p)) % p

Можно почитать почему так вот тут - https://brestprog.by/topics/modulo/

Статья в целом полезная. Я правда очень быстро забываю после прочтения, но это не так важно. Главное запомните, что если в задаче фигурируют большие числа по модулю и алгоритм у вас в целом верный, то можете фигарить взятия по модулю везде где хочется, вообще везде. Кроме деления. Ну и при вычитании надо тоже контролировать, чтобы в отрицательное не уходило. В сложении и вычитании чем больше остатков от деления тем лучше.

Собственно то, что я написал сверху написано в виде кода в предыдущем моем сообщении.
1
737 / 704 / 110
Регистрация: 29.05.2015
Сообщений: 4,316
15.07.2021, 20:24
Может с такими знаниями не нужно никуда ехать, место чужое занимать?
0
15.07.2021, 20:27

Не по теме:

Че-то вы, Алексей, решили основательно ребенка лет 14ти задушить. :D

0
 Аватар для Eisenstein
2 / 2 / 0
Регистрация: 28.06.2021
Сообщений: 35
Записей в блоге: 1
15.07.2021, 20:38  [ТС]
LegionK, спасибо огромное!!! Реально понятнее стала это тема

Добавлено через 1 минуту
Цитата Сообщение от alexu_007 Посмотреть сообщение
Может с такими знаниями не нужно никуда ехать, место чужое занимать?
Меня и не выберут, не волнуйтесь так. Мне всего лишь захотелось попробовать себя в программировании, это запрещено?
0
737 / 704 / 110
Регистрация: 29.05.2015
Сообщений: 4,316
15.07.2021, 20:46
Цитата Сообщение от Eisenstein Посмотреть сообщение
Мне всего лишь захотелось попробовать себя в программировании, это запрещено?
Это не запрещено, но начинать нужно с того, что попроще, и постепенно переходить от простого к сложному.

Цитата Сообщение от LegionK Посмотреть сообщение
Че-то вы, Алексей, решили основательно ребенка лет 14ти задушить.
А вы уверены, что вопрос задаёт ребёнок, 14 лет, и вообще женщина?
0
 Аватар для LegionK
393 / 263 / 193
Регистрация: 02.05.2017
Сообщений: 1,003
15.07.2021, 20:51
Eisenstein, пишите.
alexu_007, конечно это ребёнок. По стилю общения видно. Аватар тоже соответствует.

Все, заканчиваем тему, что-то лишнее началось. Со своей стороны я точно здесь больше отвечать не буду.
0
 Аватар для Eisenstein
2 / 2 / 0
Регистрация: 28.06.2021
Сообщений: 35
Записей в блоге: 1
15.07.2021, 20:53  [ТС]
Цитата Сообщение от alexu_007 Посмотреть сообщение
нужно с того, что попроще,
Он бесплатный и у меня профильный класс в школе, так что это в любом случае будет полезно
0
737 / 704 / 110
Регистрация: 29.05.2015
Сообщений: 4,316
15.07.2021, 22:02
Судя по тому, что было написано ранее, вы так и не поняли:

- как это работает вообще
- куда можно было "прикрутить" код, который предложил я
- почему выдал ошибку код, который написали вы по подсказке LegionK
- что поменял LegionK и почему после этого тест был пройден
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
29.06.2022, 11:42
Вот еще на ту же тему Оптимизировать код (Обратное число)
0
3 / 3 / 0
Регистрация: 07.04.2023
Сообщений: 30
26.04.2023, 09:08
TheCalligrapher, Здравствуйте, помогите пожалуйста с данным вопросом https://www.cyberforum.ru/abou... st16876283
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.04.2023, 09:08

Максимальное обратное число
Помогите Пожалуйста! https://www.hackerrank.com/contests/homework-8/challenges/max-reverse-number Пользователь вводит число n и...

Задача Обратное Число:
Обратное число В этой задаче нужно ответить на 1≤t≤105 запросов. Каждый запрос состоит из двух целых чисел 2≤p≤109 и 0&lt;a&lt;p, число p...

Перегруженный оператор возвращающий обратное число
нужно создать оператор чтобы выводил обратное число??? FazzyNumber operator +(const FazzyNumber&amp; other) const { return...

Получите число. отобразить на экране обратное числом
Получите число. отобразить на экране обратное числом.

Прямое и обратное БПФ
Здравствуйте! Стоит задача написать прямое и обратное быстрое преобразование Фурье без помощи сторонних библиотек, только std. Взял...


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

Или воспользуйтесь поиском по форуму:
36
Ответ Создать тему
Новые блоги и статьи
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов. Логика кажется понятной: 1. Находим ключевые слова. 2. Добавляем их на. . .
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302 Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
SUNO Ai - Река Без Дна
zorxor 31.07.2026
Автор стихотворения - астрофизик Марина Катыс Ссылка на сгенерированную музыкальную композицию: https:/ / suno. com/ song/ 6f6e5464-b290-4650-be6c-44c85f8d8013 Я говорю, что Время- как вода течет. . .
Из невошедшего на форум (диалог с ИИ-гугла)
zorxor 29.07.2026
А вот, что интересно, сказал мне ИИ-гугла: Этот текст — эмоциональный пост пользователя под ником zorxor на интернет-форуме (вероятно, посвященном мистике, непознанному или альтернативной науке). . . .
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет Салют, шампанское, овации! :drink:
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru