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

Найти числа на отрезке, у которых ровно 5 нечетных делителей

05.10.2021, 20:28. Показов 2540. Ответов 11

Студворк — интернет-сервис помощи студентам
Здравствуйте, не могу решить задачу с таким условием:

Найти все натуральные числа, принадлежащие отрезку [47*10^6; 52*10^6], у которых ровно 5 различных нечетных делителей (количество четных может быть любым).
Для каждого найденного числа запишите его значение и значение наибольшего нечетного делителя.

Вот мой код:
Python
1
2
3
4
5
6
7
8
9
10
11
k = 0
cnt = 0
for num in range(4*10**6, 52*10**6):
  delit = []
  sch = 0
  for i in range(1, num//2+1, 2):
    if num % i == 0 and len(delit) < 5:
      delit.append(i)
    elif len(delit) == 4:
      print(num, delit)
      break
Подскажите, пожалуйста, что нужно исправить для того, чтобы программа работала корректно?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.10.2021, 20:28
Ответы с готовыми решениями:

Найти числа на отрезке, у которых ровно 5 различных нечетных делителей
Добрый день, пытаюсь решить задачу, но она выполняется слишком долго. Условие: Найдите все натуральные числа, принадлежащие отрезку...

Найти числа, у которых ровно пять различных нечётных делителей
Находятся все натуральные числа, принадлежащие отрезку , у которых ровно пять различных нечётных делителей и выводятся в порядке...

Найдите все натуральные числа, у которых ровно пять различных нечётных делителей
Найдите все натуральные числа, принадлежащие отрезку , у которых ровно пять различных нечётных делителей (количество чётных делителей может...

11
 Аватар для Semen-Semenich
5234 / 3479 / 1175
Регистрация: 21.03.2016
Сообщений: 8,306
05.10.2021, 20:35
вы в каждой итерации первого цикла заново создаете пустой список в который добавляете число и снова его перезаписываете на пустой. это так бегло первая ошибка. вторая вы не проверяете делитель на нечетность
Цитата Сообщение от Rumynoff Посмотреть сообщение
5 различных нечетных
с функциями знакомы?
0
0 / 0 / 0
Регистрация: 30.06.2020
Сообщений: 45
05.10.2021, 20:40  [ТС]
Semen-Semenich, с помощью этого списка я проверяю количество делителей, а потом если делителей ровно 4, то программа выводит число и его делители, разве это не так должно работать? И зачем мне проверять делитель на четность, если у меня второй цикл, который перебирает делители числа, установлен с шагом 2(т.е. каждое нечетное число)
0
 Аватар для Semen-Semenich
5234 / 3479 / 1175
Регистрация: 21.03.2016
Сообщений: 8,306
05.10.2021, 20:45
Rumynoff, чет я упустил про шаг. ну тогда к вопросу о списке
так понятней будет?
Python
1
2
3
4
5
6
for num in range(100):
  delit = []
  # тут второй цикл но суть та же
  delit.append(num)
 
print(delit)
хоть миллиард итераций но в списке последнее значение num потому что список перезаписывается. вынести список за пределы цикла.

Python
1
2
3
4
5
6
delit = []
for num in range(100):
  # тут второй цикл но суть та же
  delit.append(num)
 
print(delit)
0
1956 / 874 / 352
Регистрация: 05.09.2021
Сообщений: 1,387
05.10.2021, 20:52
Цитата Сообщение от Rumynoff Посмотреть сообщение
[47*10^6; 52*10^6]
Цитата Сообщение от Rumynoff Посмотреть сообщение
for num in range(4*10**6, 52*10**6):
Вот тут несовпадение, вероятно опечатка, скорее всего во второй строчке (с кодом). Там у вас 4*10**6, а должно быть 47*10**10. Или наоборот, проверьте.

Добавлено через 2 минуты
И второй аргумент в функции range должен быть "+1", т.к. квадратные скобки в условии предполагают что границы включены в диапазон.
0
0 / 0 / 0
Регистрация: 30.06.2020
Сообщений: 45
05.10.2021, 20:54  [ТС]
Semen-Semenich, Да, я понял, спасибо, а как я могу ускорить программу, чтобы она работала не по 40 минут?
А так же почему теперь при запуске программа сразу выводит первое число из цикла?
Python
1
2
3
4
5
6
7
8
9
10
11
k = 0
cnt = 0
delit = []
for num in range(47458320, 52*10**6):
  sch = 0
  for i in range(1, num//2+1, 2):
    if num % i == 0 and len(delit) < 5:
      delit.append(i)
    elif len(delit) == 4:
      print(num, delit)
      break
Или мне стоит что-то еще исправить?
0
1956 / 874 / 352
Регистрация: 05.09.2021
Сообщений: 1,387
05.10.2021, 21:01
Rumynoff, А единица по условиям считается делителем? Она вроде нечетная, и на нее любое натуральное число будет делиться.
0
 Аватар для Semen-Semenich
5234 / 3479 / 1175
Регистрация: 21.03.2016
Сообщений: 8,306
05.10.2021, 21:11
Цитата Сообщение от Rumynoff Посмотреть сообщение
как я могу ускорить программу, чтобы она работала не по 40 минут
заменить функцию len на счетчик. каждый раз пересчитывать длину списка уже время (хоть и маленькое) ну и не корректно elif. представьте у вас делитель четный, if не срабатывает переходим к elif и о чудо там 4 первых делителя, их выводим и досвидос.
47458320 [1, 3, 5, 7] а по условию
Цитата Сообщение от Rumynoff Посмотреть сообщение
ровно 5 различных нечетных делителей
0
1956 / 874 / 352
Регистрация: 05.09.2021
Сообщений: 1,387
05.10.2021, 21:17
Python
1
2
3
4
5
6
7
8
9
10
for num in range(47 * 10 ** 6, 52 * 10 ** 6 + 1):
    dev_count = 0
    for dev in range(1, num // 2 + 2):
        if num % dev == 0:
            dev_count += 1
            dev_max = dev
            if dev_count == 6:
                break
    if dev_count == 5:
        print(num, dev_max)
Semen-Semenich,
А зачем там вообще список делителей?
В условиях же написано
Цитата Сообщение от Rumynoff Посмотреть сообщение
Для каждого найденного числа запишите его значение и значение наибольшего нечетного делителя
Там нужно только последний, список не нужен.
1
 Аватар для Semen-Semenich
5234 / 3479 / 1175
Регистрация: 21.03.2016
Сообщений: 8,306
05.10.2021, 21:21
anton78spb, я в курсе. автора хотел подвести под это решение
0
1956 / 874 / 352
Регистрация: 05.09.2021
Сообщений: 1,387
05.10.2021, 21:23
Semen-Semenich, Сорри
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
05.10.2021, 21:30
Rumynoff,
Python
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
def primes(n) :
    res = {2}
    prime = [True] * (n+1)
    for i in range(3, n + 1, 2) :
        if not prime[i]:
            continue
        res.add(i**4)
        for j in range(i * i, n+1, i):
            prime[j] = False
    return sorted(res)
    
    
cnt = 0
delit = []
 
a = 47458320
b = 52000000
pr_quat = primes(int(b**.25) + 1)
for num in pr_quat:
    tmp = num
    while tmp < a:
        tmp <<= 1
    if tmp <= b:
        cnt += 1
        delit.append((tmp, num))
        print(tmp, num)
print('end')
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.10.2021, 21:30
Помогаю со студенческими работами здесь

Найти числа, принадлежащие отрезку [35 000 000; 40 000 000], у которых ровно 5 различных нечётных делителей
Найдите все натуральные числа, принадлежащие отрезку , у которых ровно пять различных нечётных делителей (количество чётных делителей может...

Числа, у которых ровно пять различных нечётных делителей
Найдите все натуральные числа, принадлежащие отрезку , у которых ровно пять различных нечётных делителей (количество чётных делителей может...

Найдите все натуральные числа,у которых ровно пять различных нечётных делителей
Найдите все натуральные числа, принадлежащие отрезку , у которых ровно пять различных нечётных делителей (количество чётных делителей может...

Найти сумму и количество целых чисел у которых ровно Y нечетных делителей
Задача по с# на практику если можно с блок-схемой Найти сумму и количество целых чисел из промежутка от 150 до 460 у которых ровно Y...

Найдите все числа, принадлежащие заданному отрезку, у которых ровно пять различных нечётных делителей
Найдите все натуральные числа, принадлежащие отрезку , у которых ровно пять различных нечётных делителей (количество чётных делителей может...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru