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

Степень

19.07.2021, 14:24. Показов 11492. Ответов 45
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Степень
Для того чтобы проверить, как её ученики умеют считать, Мария Ивановна каждый год задаёт им на дом одну и ту же задачу — для заданного натурального A найти минимальное натуральное N такое, что N в степени N (N, умноженное на себя N раз) делится на A. От года к году и от ученика к ученику меняется только число A.

Вы решили помочь будущим поколениям. Для этого вам необходимо написать программу, решающую эту задачу.

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

Во входных данных содержится единственное число A (1≤A≤10^9 — на всякий случай; вдруг Мария Ивановна задаст большое число, чтобы «завалить» кого-нибудь…).

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

Выведите число N.

Примеры
Ввод
1
Вывод
1
Ввод
8
Вывод
4
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.07.2021, 14:24
Ответы с готовыми решениями:

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

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

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

45
738 / 705 / 110
Регистрация: 29.05.2015
Сообщений: 4,356
23.07.2021, 08:40
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Folian Посмотреть сообщение
Показывают расхождение результатов моего и COKPOWEHEU
1212 = 8916100448256, это и обычный калькулятор считает. 8916100448256 / 221184 = 40310784
Так что результаты COKPOWEHEU неправильные.

Неск. чисел для проверки. У вас так же?

774840978 18 (2, 3)
671088640 20 (2, 5)
645700815 45 (3, 5)
939524096 28 (2, 7)
903981141 21 (3, 7)
0
 Аватар для COKPOWEHEU
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,095
23.07.2021, 09:46
774840978 18 (2, 3) да (21 * 318)
671088640 20 (2, 5) да (227 * 51)
645700815 45 (3, 5) нет, (317* 51) -> 30
939524096 28 (2, 7) да (227 * 71)
903981141 21 (3, 7) да (317 * 71)

Добавлено через 2 минуты
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
645700815 45 (3, 5) нет, (317* 51) -> 30
Тут мой вариант точнее вашего. Дело в том, что перебирать множители надо не только среди делителей, а среди всех чисел. Не всегда нужно поднимать степень делителя, может хватить просто увеличения.
0
738 / 705 / 110
Регистрация: 29.05.2015
Сообщений: 4,356
23.07.2021, 12:20
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Тут мой вариант точнее вашего.
Да дело не в точности, а в правильности работы. У меня была ошибка. Спасибо.
0
Гвоздь Задиров
 Аватар для Folian
1719 / 1118 / 337
Регистрация: 25.01.2019
Сообщений: 2,946
23.07.2021, 19:33
Короч я понял что нужно делать:

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
#include <iostream>
#include <map>
#include <algorithm>
#include <numeric>
#include <cmath>
 
std::map<int, int> factorize(int num)
{
    std::map<int, int> divpow;
    auto divid = [&num, &divpow](int val)
    {
        while(!(num % val))
        {
            ++divpow[val];
            num /= val;
        }
    };
 
    divid(2);
    for(int i = 3, e = sqrt(num) + 1; i <= e; i += 2) divid(i);
    if(num > 1) ++divpow[num];
 
    return divpow;
}
 
int foo(int num)
{
    auto numfact = factorize(num);
    if(numfact.find(num) != numfact.end()) return num;
    int mult = std::accumulate(numfact.begin(), numfact.end(), 1, [](int a, const auto& b) { return a * b.first; });
 
    auto check = [](int supposed, auto numfact)
    {
        auto supfact = factorize(supposed);
        for(auto &i : supfact) numfact[i.first] -= i.second * supposed;
        return std::all_of(numfact.begin(), numfact.end(), [](auto &a){ return a.second <= 0; });
    };
 
    int k = 1;
    int result = mult;
    while(!(check(result, numfact))) result = ++k * mult;
 
    return result;
}
 
int main()
{
    int x;
    std::cin >> x;
    std::cout << foo(x);
 
    return 0;
}
При переборе с домножением, когда степеней не хватает, нужно факторизовать предполагаемый ответ и вычитать из факторизованного заданного числа степени предполагаемого.

Мой предыдущий вариант вызывал у меня сомнения и негодование, в этом же я уверен, через него, думаю, проверять можно. И милярд тут не предел.
Миниатюры
Степень  
0
Гвоздь Задиров
 Аватар для Folian
1719 / 1118 / 337
Регистрация: 25.01.2019
Сообщений: 2,946
23.07.2021, 20:29
И, в среднем, гораздо шустрее оказывается ; хотя можно и улучшить: факторизовать не всё произведение, а только множитель.
0
848 / 651 / 323
Регистрация: 24.02.2017
Сообщений: 2,297
23.07.2021, 23:05
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
#include <iostream>
#include <cmath>
 
 unsigned long long f(unsigned long long a) {
    unsigned  long long n, n1, n2, i = 1;
 
    while (1) {
        n = pow(a, 0.5)*pow(i, 0.5);
        n1 = n + 1;
        n2 = n - 1;
 
        if (n*n == a * i) {
            return n;
            break;
        }
        if (n1*n1 == a * i) {   
            return n1;
            break;
        }
        if (n2*n2 == a * i) {
            return n2;  
            break;
        }
        i++;
    }   
}
 
 
 
int main()
{
    unsigned long long  a, count = 0;
    unsigned  long long b[10] = { 0 };
 
    std::cin >> a;
    b[0] = a;
    while (1) {
        b[count] = f(b[count++]);
        if (b[count-1]==b[count] )break;        
    }
 
    
    for (int j = 0; j <10; j++)
        std::cout << b[j] << "   ";
    
}
искомое число записано в массиве. Остается только сделать проверку что оно в своей степени делиться на заданное.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.07.2021, 23:05

Степень
По заданному числу A определить такие B и С, что A=BC, а C – наибольшее. Входные данные Натуральное число N (N &lt; 1000) –...

Степень
Хочу реализовать 2 в 3 степени .. но не могу докумекать как это сделать .. Каким циклом сделать лучше ? 2*2*2=8 ВНИМАНИЕ НЕ...

степень
создать класс для вычисления числа n в степени k, перегрузить оператор * умножения. помогите перегрузить оператор, желательно с...

Возведение в степень!
Определить {\chi }^{15} без использования функций и не более чем 5-ю арифметическими операциями.

Возведение в степень
Здравствуйте, нужно возвести константу &quot;e&quot; в степень -x-2, может кто-нибудь подскажет как это сделать


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

Или воспользуйтесь поиском по форуму:
46
Ответ Создать тему
Новые блоги и статьи
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru