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

Задача "Степень"

15.06.2022, 12:47. Показов 592. Ответов 1

Студворк — интернет-сервис помощи студентам
Дана задача
Для того чтобы проверить, как её ученики умеют считать, Мария Ивановна каждый год задаёт им на дом одну и ту же задачу — для заданного натурального A найти минимальное натуральное N такое, что N в степени N (N, умноженное на себя N раз) делится на A. Необходимо написать программу, решающую эту задачу.
Я написал код на С++:
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <iostream>
#include <vector>
#include <cmath>
#include <unordered_set>
using namespace std;
vector<int> decomp (int n)
{
    vector<int> ans (0);
    int d = 2;
    while (d * d <= n)
    {
        if (n % d == 0)
        {
            ans.push_back(d);
            n /= d;
        }
        else
            d += 1;
    }
    if (n > 1)
        ans.push_back(n);
    return ans;
}
int main()
{
    int x; cin >> x;
    if (x == 1)
        cout << 1;
    else
    {
        vector<int> tmp = decomp(x);
        unordered_set<int> s;
        for (int el: tmp)
            s.insert(el);
        vector<int> a (0);
        for (int el: s)
            a.push_back(el);
        int y = 1;
        for (int i = 0; i < a.size(); i++)
            y *= a[i];
        if (y >= 29)
            cout << y;
        else
        {
            int k = 1; int n = k * y;
            while ((int)pow(n, n) % x != 0)
            {
                n = k * y;
                k += 1;
            }
            cout << n;
        }
    }
}
Но в какой-то момент программа выдаёт ошибку "user program output: Unexpected EOF". Подскажите пожалуйста, что не так с этим кодом и как решить эту задачу/проблему? (тестовые данные мне не известны...)

Добавлено через 32 минуты
1 <= A <= https://www.cyberforum.ru/cgi-bin/latex.cgi?{10}^{9}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.06.2022, 12:47
Ответы с готовыми решениями:

Задача на степень числа (a^n + b^n = c^n)
Уважаемые программисты, не понимаю, как решить уравнение a^n + b^n = c^n ( неужели можно использовать метод полного перебора). Подскажите...

Возведение действительного числа a в степень n. Задача
Добрый день! Только начинаю разбираться в циклах. Задача: Даны действительное число a, натуральное число n. Вычислить а^n. Разбираю...

Задача на графы. Удалить ребра так, чтобы степень любой вершины была равна 3 или 0
Здравствуйте. Условие задачи, собственно, в названии темы. Возникли проблемы с алгоритмом, не говоря уже про код. Ограничений на входной...

1
place status here
 Аватар для gunslinger
3185 / 2219 / 640
Регистрация: 20.07.2013
Сообщений: 5,987
15.06.2022, 13:20
Чтобы не было переполнения при возведении в степень, можно использовать следующую функцию нахождения остатка от деления при возведении числа в степень:
C++
1
2
3
4
5
6
7
8
9
10
11
12
unsigned long long mod(unsigned long long N, unsigned long long power, unsigned long long A)
{
  unsigned long long result = 1;
  while (power)
  {
    if (power % 2)
      result = (result * N) % A;
    N = (N * N) % A;
    power /= 2;
  }
  return result;
}
Нам нужно выполнение условия mod(N, N, A) = 0.
Пример вызова:
C++
1
2
3
4
5
6
7
8
  // задаем значение A
  // значение N изначально должно быть равно 1
  // (если делать какую-либо оптимизацию, то, наверно, начальное N может иметь другое значение)
  unsigned long long A = 25, N = 1;
  while (mod(N, N, A) != 0)
    N++;
 
  // выводим N
Только для большИх A код может работать очень долго.
Предполагаю, что нужно сделать какую-то оптимизацию. Но мыслей на этот счет пока нет.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.06.2022, 13:20
Помогаю со студенческими работами здесь

Вычислить 10-ю степень двойки сложением, умножением и просто возведением в степень.
Написать код на С++ или С# или на Java Вычислить 10-ю степень двойки 1 - сложением, умножением и просто возведением в степень.

Вычислить сумму чисел от 1 до N, возведенных в степень M. Возведение в степень оформить как многократное умножение
Не знаю как это написать.. или объясните пожалуйста или помогите сделать)

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

Задача «Степень»
Для того чтобы проверить, как её ученики умеют считать, Мария Ивановна каждый год задаёт им на дом одну и ту же задачу — для заданного...

Задача «Степень»
Для того чтобы проверить, как её ученики умеют считать, Мария Ивановна каждый год задаёт им на дом одну и ту же задачу — для заданного...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru