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

Узнать когда ближайший значимый юбилей

03.09.2023, 12:07. Показов 1166. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ромка ввёл понятие юбилейности числа, равное максимальному количеству нулей в конце записи этого числа в какой-то системе счисления с основанием B, где B — целое число, большее единицы.
Например, юбилейность числа 256 равна 8, так как в двоичной системе счисления оно оканчивается на
8 нулей . Ромка хочет узнать, когда его ближайший следующий значимый юбилей, если сейчас ему Xлет? Значимым юбилеем он считает количество лет, которое обладает юбилейностью как минимум L.

Единственная строка ввода содержит два целых числа X и L(1≤X≤1012; 1≤L≤50).

Мой код который не проходит один из тестов по времени:
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
#include <iostream>
#include <math.h>
using namespace std;
long long x, t;
short l, z, mz;
 
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin >> x >> l;
    x++;
    while (true)
    {
        mz = 0;
        t = x;
        for (unsigned long long i = 2; i <= sqrt(x); i++)
        {
            if (t % i == 0)
            {
                z = 0;
                while (t % i == 0)
                {
                    z++;
                    t /= i;
                }
                mz >= z ? mz = mz : mz = z;
                if (mz >= l)
                {
                    break;
                }
            }
        }
        if (t > 1)
        {
            mz >= 1 ? mz = mz : mz = 1;
        }
        if (mz >= l)
        {
            break;
        }
        x+=2;
    }
    cout << x;
}
Помогите пожалуйста!
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.09.2023, 12:07
Ответы с готовыми решениями:

Когда следует использовать значимый тип, а когда ссылочный?
Почитал про значимые и ссылочные типы, ознакомился с отличиями между ними, как работают те и другие. Но хотел бы увидеть от...

Найти ближайший момент времени от начала ее движения, когда модуль импульса частицы становится максимальным.
Если путь частицы массой 2 кг изменяется по закону s = 5 Sin πt (см). Найдите ближайший момент времени от начала ее движения, когда модуль...

Как узнать когда программу запустил User, а когда автозагрузка ?
Как узнать когда программу запустил User, а когда автозагрузка ?

12
Модератор
Эксперт С++
 Аватар для zss
13770 / 10963 / 6491
Регистрация: 18.12.2011
Сообщений: 29,240
03.09.2023, 12:30
Чему равно основание B?
В задании этого не написано.
По умолчанию можно предположить 2 варианта:
двоичная или десятичная.

И условие задачи придумывал некто странный,
как может быть Ромке 1012 лет?

По существу вопроса, думаю, что у Вас лишние циклы.
Надо X перевести в нужную систему счисления,
потом, чтобы получить нужное число, обнулить L цифр справа, а в (L+1)-ой прибавить единицу.
0
0 / 0 / 0
Регистрация: 02.09.2023
Сообщений: 3
03.09.2023, 13:53  [ТС]
В данной задаче основание b может быть любым ,в моем коде оно определяется переменной i в цикле for
0
Заблокирован
03.09.2023, 16:51
Sem7, есть у меня индейка, но я не анализировал её до конца.
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
#include <iostream>
#include <cmath>
 
using namespace std;
 
int main()
{
    uint64_t x = 16807; // годиков
    uint64_t l = 4;  // критерий юбилея, количество необходимых нулей
    uint64_t c = 2;  // минимальная система счисления
    uint64_t x_max_2 = pow(c, l);  // 
    uint64_t x_max = x + (x_max_2 - x%x_max_2);
    uint64_t c_max = log(x)/log(l+1)+1; // максимальная систем счисления
    // почему максимальная ?
    // потому что при c_max будет достигнут наше требование и оно больше x
    cout << "X max : " << x_max << endl;
    cout << "B max : " << c_max << endl;
 
    uint64_t x_res;  // результат X
    uint64_t c_res = 2;  // при СС 
    if (x%x_max_2)
        x_res = x_max;
    else
        x_res = x;
    uint64_t x_diff = x_res - x;
    for(uint64_t c = 3; c<=c_max; ++c){
        int x_c = pow(c, l);
        uint64_t x_c_res;
        if (x%x_c)
            x_c_res = (x + (x_c - x%x_c));
        else
            x_c_res = x;
        uint64_t diff = x_c_res - x;
        if (diff < x_diff){
            x_res = x_c_res;
            x_diff = diff;
            c_res = c;
        }
    }
    cout << c_res << " : " << x_res;
}
При :
C++
1
2
    uint64_t x = 16807; // годиков
    uint64_t l = 4;
Code
1
2
3
4
X max : 16816
B max : 7
7 : 16807
000001
При :
C++
1
2
    uint64_t x = 16807; // годиков
    uint64_t l = 63;
Code
1
2
3
X max : 9223372036854775808
B max : 3
2 : 9223372036854775808
Нужно поправить нахождение макс. СС.
1
0 / 0 / 0
Регистрация: 02.09.2023
Сообщений: 3
03.09.2023, 18:51  [ТС]
Это код проходит только первые 4 теста
0
Заблокирован
03.09.2023, 19:37
Цитата Сообщение от Sem7 Посмотреть сообщение
Это код проходит только первые 4 теста

Цитата Сообщение от SmallEvil Посмотреть сообщение
есть у меня индейка
А это ничего не значит ?
Развивайте.
0
place status here
 Аватар для gunslinger
3186 / 2220 / 640
Регистрация: 20.07.2013
Сообщений: 6,011
04.09.2023, 01:41
Цитата Сообщение от Sem7 Посмотреть сообщение
В данной задаче основание b может быть любым ,в моем коде оно определяется переменной i в цикле for
Если B может быть любым, значит, мы не можем на него накладывать ограничения?
Проверять до бесконечности?
Тут должно быть какое-то математическое обоснование касаемо данного момента - до какого предела B проверять.
Правильно?

И еще - имеются ли варианты тестовых входных данных и соответствующих ответов (решений)?
0
Заблокирован
04.09.2023, 02:02
Цитата Сообщение от gunslinger Посмотреть сообщение
Проверять до бесконечности?
Почему до бесконечности, до X+1 )
То есть
число X = 26 , критерий юбилея 1 (1 нолик)
След. юбилей 27 с СС = 27.
Тут зависимость от L. Пусть ищет.
Я специально написал красным предупреждение.
1
04.09.2023, 02:35

Не по теме:

Просто постановка задачи (относительно B) показалась мне "туманной", поэтому я и предположил наличие какого-то "подвоха".

0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6144 / 2837 / 1040
Регистрация: 01.06.2021
Сообщений: 10,340
04.09.2023, 05:55
Лучший ответ Сообщение было отмечено Sem7 как решение

Решение

Как понимаю, максимальное количество нулей в двоичной системе у степеней числа 2:
2 → 10
4 → 100
8 → 1000
16 → 10000
и т.д.
в base10 - у степеней числа 10.
в base8 у степеней числа 8.
в base16 у степеней числа 16.
Т.е. максимальное количество нулей в baseN будет у степеней числа N (N^2, N^3, N^4 ...)
Одно и то же число, может быть степенью нескольких чисел, поэтому нужно начинать проверять с двоичной системы и т.д.
3
Заблокирован
04.09.2023, 11:30
Цитата Сообщение от Royal_X Посмотреть сообщение
Одно и то же число, может быть степенью нескольких чисел, поэтому нужно начинать проверять с двоичной системы и т.д.
Но не все же СС проверять.
L = 1 я бы вынес в исключения, так как ответ всегда X+1
При остальных MinB и MaxB можно определить след образом.
MinB = 2 всегда
MaxB = 1 000 000
Достаточно ли этого, просто линейно рассчитать 1М операций ?
Решать автору.
C++
1
2
3
4
5
6
    uint64_t X = 1000000000000, L = 2;
    int MinB = 2;
    uint64_t x_max_2 = pow(MinB, L);
    uint64_t x_max = X + (x_max_2 - X%x_max_2);
    int MaxB = ceil(pow(x_max, 1./(L)));
    cout << MaxB;
Интерес к этой задачи я потерял ещё в посте #4
1
1 / 1 / 0
Регистрация: 12.02.2016
Сообщений: 15
08.09.2023, 10:39
Цитата Сообщение от Sem7 Посмотреть сообщение
sqrt(x)
В цикле явно не надо это вычислять
Цитата Сообщение от Sem7 Посмотреть сообщение
x+=2;
Почему не x++?
0
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
08.09.2023, 11:56
Цитата Сообщение от Royal_X Посмотреть сообщение
Как понимаю, максимальное количество нулей в двоичной системе у степеней числа 2:
2 → 10
4 → 100
8 → 1000
16 → 10000
и т.д.
в base10 - у степеней числа 10.
в base8 у степеней числа 8.
в base16 у степеней числа 16.
Отличная идея!
Тогда получается надо вычислять логарифм от X по переменному основанию (от 2 до надо посчитать сколько) и выбрать такое основание, результат логарифмирования по которому даст минимальную дробную часть. Это и будет ответ.

Когда результат логарифмирования станет меньше L - это и есть верхняя граница для поиска ответа, дальше искать не нужно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.09.2023, 11:56
Помогаю со студенческими работами здесь

Узнать когда и какая кнопка была нажата и когда была отпущенна
Привет, программирую в Code::Blocks + wxWidgets 2.8.12 Хочу сделать там что-то вроде компонента HotKey в былдере. Но для этого нужно...

Довольно значимый вопрос
краткий вопрос: Как узнать точную дату индексации страницы, сайта?? Особенно конкурентов.

Как определить ссылку на значимый тип
Допустим в классе A есть статическое поле static int P; как определить переменную int L в Main Так что бы адрес &amp;L==&amp;A.P? Простое...

Узнать, когда картинка скопировалась
С помощью команды: adb shell -s screencap -p &gt; ..... Я делаю скриншот экрана телефона и копирую его на комп. Копируется он несколько...

Узнать когда завершился Thread
Допустим я запустил поток из другого потока и в этом другом потоке хочу узнать когда завершится(выполнит свою задачу) тот поток что я...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
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-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru