С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/14: Рейтинг темы: голосов - 14, средняя оценка - 4.71
63 / 52 / 11
Регистрация: 14.01.2021
Сообщений: 406
1

Посчитать кол-во чисел со всевозможными кол-вами делителей

01.03.2021, 23:25. Показов 2576. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вводится диапазон, например, от 0 до 1 000 000
Вывод
Количество чисел с 1 делителем: 1
Количество чисел с 2 делителями: ...
Количество чисел с 3 делителями: ...
Количество чисел с 4 делителями: ...
и т.д. до кол-ва чисел с максимальным кол-вом делителей
То есть нужно выводить для каждого кол-ва делителей, даже если 0 таких чисел

Вот программа, которая считает кол-во чисел с 4 делителями:

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
28
29
30
31
32
33
34
def prns(n):
    list_true = [True] * n
    for o in range(3, (int(n ** 0.5) + 1), 2):
        if list_true[o]:
            list_true[o * o::2 * o] = [False] * ((n - o * o - 1) // (2 * o) + 1)
    return [2] + [u for u in range(3, n, 2) if list_true[u]]
 
 
def check(n):
    if n & 1 == 0:
        return False
    d = 3
    while d * d <= n:
        if n % d == 0:
            return False
        d = d + 2
    return True
 
 
def solution():
    counter = 0
    e = int(input())
    f = int(input())
    prn = prns(int(f ** 0.5))
    for n in range(e, f + 1):
        for i in prn:
            if (i * i < n and not n % i and
                    check(n // i)):
                counter += 1
                break
    print(counter)
 
 
solution()
Например в диапазоне от 0 до 1000000 209867 чисел имеют 4 делителя
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.03.2021, 23:25
Ответы с готовыми решениями:

Составьте программу, которая определяет кол-во отрицательных, кол-во положительных и кол-во нулей среди введеных чисел
Составьте программу, которая определяет кол-во отрицательных, кол-во положительных и кол-во нулей...

Посчитать кол-во отрицательных и кол-во положительных элементов массива. Вывести массив на экран
Дан массив 5x5, заполнен случайными числами от -10 до 10. Посчитать кол-во отрицательных и кол-во...

Посчитать кол-во слов в каждом абзаце и кол-во абзацев.
2. Посчитать количество слов в каждом абзаце и количество абзацев. Абзац начинается с S-ти...

Дан файл f, элементы которого являются целыми числами. найти кол-во удвоенных нечетных чисел и кол-во четных чисел
Дан файл f, элементы которого являются целыми числами. Найти количество удвоенных нечетных чисел и...

Сделать таблицу n строк: адрес, кол-во проживающих, кол-во комнат и кол-во метров в каждой комнате
В задании нужно сделать таблицу n строк. Адрес, кол-во проживающих, кол-во комнат и кол-во метров в...

15
102 / 85 / 25
Регистрация: 21.05.2019
Сообщений: 479
02.03.2021, 10:10 2

Не по теме:

Ципихович Эндрю не твой родственник? :rofl:



Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from itertools import chain, groupby
 
num_of_div = 20
res_dict = {}
 
divs = lambda n: chain(*((d, n // d) for d in range(1, int(n ** 0.5) + 1) if n % d == 0))
lst =[list(set(i)) for i in[list(divs(i)) for i in range(1, num_of_div)]]
 
for i in range(1, num_of_div):
    res_dict["Делителей на {}".format(i)] = 0
 
for i in lst:
    for k in range(1, num_of_div):
        if k in i:
            res_dict["Делителей на {}".format(k)] += 1
 
print(res_dict)
Создаём функцию для получения делителя для конкретного числа
Получаем массив делителей для каждого числа и через set удаляем повторы
Создаём словарь с нулевыми значениями (иначе не сможем использовать += 1)
Преобразуем вложенный список в словарь

Вывод:
'Делителей на 1': 19, 'Делителей на 2': 9, 'Делителей на 3': 6, 'Делителей на 4': 4,
'Делителей на 5': 3, 'Делителей на 6': 3, 'Делителей на 7': 2, 'Делителей на 8': 2,
'Делителей на 9': 2, 'Делителей на 10': 1, 'Делителей на 11': 1, 'Делителей на 12': 1,
'Делителей на 13': 1, 'Делителей на 14': 1, 'Делителей на 15': 1, 'Делителей на 16': 1,
'Делителей на 17': 1, 'Делителей на 18': 1, 'Делителей на 19': 1
0
63 / 52 / 11
Регистрация: 14.01.2021
Сообщений: 406
02.03.2021, 10:21  [ТС] 3
RSAX,

Не по теме:

нет, а почему вы подумали?



Добавлено через 1 минуту
RSAX, мне кажется ваша программа делает обратное: она ищет кол-во чисел, которые делятся на какое-то число, а нужно посчитать кол-во чисел с одним кол-во делителей
0
102 / 85 / 25
Регистрация: 21.05.2019
Сообщений: 479
02.03.2021, 14:15 4

Не по теме:

gray621, да код интересно пишешь



Так чтоли?

Python
1
2
3
4
5
6
7
8
from itertools import chain, groupby
from collections import Counter
 
num_of_div = 1000000
 
divs = lambda n: chain(*((d, n // d) for d in range(1, int(n ** 0.5) + 1) if n % d == 0))
lst =[list(set(i)) for i in[list(divs(i)) for i in range(1, num_of_div)]]
print(dict(Counter([len(i) for i in lst])))
Код
Вывод:
1: 1, 2: 78498, 3: 168, 4: 209892, 6: 43870, 5: 11, 8: 224427, 9: 291, 10: 8117, 
12: 91554, 7: 4, 16: 127275, 15: 109, 18: 9270, 14: 2059, 20: 15018, 24: 69142, 
21: 44, 30: 2779, 32: 40592, 27: 156, 28: 3356, 11: 2, 36: 12571, 25: 7, 40: 9199, 
48: 23663, 42: 669, 22: 168, 45: 86, 13: 2, 60: 2896, 35: 7, 54: 905, 50: 176, 56: 1681, 
64: 6746, 33: 11, 72: 4946, 26: 52, 63: 29, 80: 2157, 44: 195, 84: 510, 90: 276, 70: 75, 
96: 3304, 75: 13, 39: 5, 81: 25, 100: 120, 66: 49, 49: 1, 108: 448, 120: 667, 112: 265, 
52: 45, 17: 1, 55: 3, 128: 408, 126: 42, 88: 52, 144: 464, 105: 7, 160: 121, 135: 7, 
140: 23, 78: 11, 34: 5, 168: 54, 150: 13, 99: 2, 98: 6, 19: 1, 180: 39, 132: 12, 65: 1, 
192: 70, 162: 13, 110: 3, 104: 6, 200: 5, 216: 9, 51: 1, 224: 3, 189: 1, 240: 5, 77: 1, 
38: 1, 125: 1, 210: 1, 117: 1, 176: 1, 68: 1
Добавлено через 4 минуты
Или как принято на форуме в одну строчку

Python
1
print(dict(__import__("collections").Counter([len(i) for i in[list(set(i)) for i in[list((lambda n: __import__("itertools").chain(*((d, n // d) for d in range(1, int(n ** 0.5) + 1) if n % d == 0)))(i)) for i in range(1, 1000)]]])))
1
63 / 52 / 11
Регистрация: 14.01.2021
Сообщений: 406
02.03.2021, 15:24  [ТС] 5
RSAX, в чём-то ошибка, в 1 000 000 209867 числа имеют 4 делителя, а не 209892, и можно как-то сделать упорядоченный вывод, почему-то после 4 делителей 6, после 189 делителей 240
0
Эксперт Python
8787 / 4442 / 1859
Регистрация: 27.03.2020
Сообщений: 7,271
02.03.2021, 17:04 6
gray621, у тебя ошибка на 25 чисел - это кубы простых чисел - 8, 27, 125, 343... До миллиона их 25
0
63 / 52 / 11
Регистрация: 14.01.2021
Сообщений: 406
02.03.2021, 19:34  [ТС] 7
Gdez, ну так это у тебя ошибка, у кубов 4 делителя, поэтому на 25 больше

Добавлено через 15 минут
А нет, это я взял наверное твой старый код, прости

Добавлено через 16 минут
Gdez, RSAX, а как сделать упорядо,черный вывод из словаря?
0
Эксперт Python
8787 / 4442 / 1859
Регистрация: 27.03.2020
Сообщений: 7,271
02.03.2021, 22:19 8
Лучший ответ Сообщение было отмечено gray621 как решение

Решение

gray621, вот чуть быстрее
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
28
29
30
31
32
from collections import Counter
from math import log
import numpy as np
def primes(n):
    nn = int(np.sqrt(n)) + 1
    pr = np.ones(nn, dtype = 'int')
    for p in range(3, int(np.sqrt(nn)) + 1, 2) :
        if pr[p] :
            pr[np.arange(p*p, nn, 2*p)] = 0
    res = np.array(np.nonzero(pr)).ravel()
    res = res[(res%2 == 1),]
    res[0,] = 2
    return res 
 
def main():
    k = 1000000
    pr = primes(k)
    arr = np.arange(1, k + 1)
    res = np.ones(k, dtype=int, order='F')
    for p in pr:
        tmp = np.ones(k, dtype=int, order='F')
        npow = int(log(k, p)) + 1
        for i in range(1, npow):
            tmp[(arr%p == 0)] += 1
            arr[(arr%p == 0)] //= p
        res = np.multiply(tmp, res)
    arr[(arr > 1)] = 2
    res = np.multiply(arr, res)
    res = Counter(res.tolist())
    print(sorted(res.items()))
 
main()
1
63 / 52 / 11
Регистрация: 14.01.2021
Сообщений: 406
02.03.2021, 22:30  [ТС] 9
Gdez, функция primes медленная
0
198 / 164 / 41
Регистрация: 13.05.2019
Сообщений: 844
02.03.2021, 22:35 10
Цитата Сообщение от gray621 Посмотреть сообщение
функция primes медленная
Напиши быструю.
0
63 / 52 / 11
Регистрация: 14.01.2021
Сообщений: 406
02.03.2021, 22:36  [ТС] 11
Gdez,
Python
1
2
3
4
5
6
def prns(n):
    list_true = [True] * n
    for o in range(3, (int(n ** 0.5) + 1), 2):
        if list_true[o]:
            list_true[o * o::2 * o] = [False] * ((n - o * o - 1) // (2 * o) + 1)
    return [2] + [u for u in range(3, n, 2) if list_true[u]]
эта функция гораздо быстрее
0
Эксперт Python
8787 / 4442 / 1859
Регистрация: 27.03.2020
Сообщений: 7,271
02.03.2021, 22:42 12
gray621, ошибаешься
0
63 / 52 / 11
Регистрация: 14.01.2021
Сообщений: 406
02.03.2021, 22:46  [ТС] 13
Gdez, она вроде до миллиарда не так долго выводила

Добавлено через 1 минуту
а ну все понятно она на numpy, но функция prns без
0
Эксперт Python
8787 / 4442 / 1859
Регистрация: 27.03.2020
Сообщений: 7,271
02.03.2021, 22:46 14
До 10^6 отстает немного, а уже при 10^9 - значительно
0
63 / 52 / 11
Регистрация: 14.01.2021
Сообщений: 406
02.03.2021, 23:08  [ТС] 15
Gdez, можешь помочь сделать график на полученных данных, пж? Я не очень разбираюсь в matplotlib
0
63 / 52 / 11
Регистрация: 14.01.2021
Сообщений: 406
03.03.2021, 18:48  [ТС] 16
Gdez, с графиком и выводом, но я не знаю как сделать график лучше, можете помочь, пожалуйста?

Добавлено через 24 секунды
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
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
55
56
57
58
59
60
61
62
from collections import Counter
from math import log
import numpy as np
import matplotlib.pyplot as plt
 
 
def primes(n):
    nn = int(np.sqrt(n)) + 1
    pr = np.ones(nn, dtype='int')
    for p in range(3, int(np.sqrt(nn)) + 1, 2):
        if pr[p]:
            pr[np.arange(p * p, nn, 2 * p)] = 0
    res = np.array(np.nonzero(pr)).ravel()
    res = res[(res % 2 == 1)]
    res[0] = 2
    return res
 
 
def main():
    k = int(input())
    pr = primes(k)
    arr = np.arange(1, k + 1)
    res = np.ones(k, dtype=int, order='F')
 
    for p in pr:
        tmp = np.ones(k, dtype=int, order='F')
        npow = int(log(k, p)) + 1
 
        for i in range(1, npow):
            tmp[(arr % p == 0)] += 1
            arr[(arr % p == 0)] //= p
 
        res = np.multiply(tmp, res)
 
    arr[(arr > 1)] = 2
    res = np.multiply(arr, res)
    res = Counter(res.tolist())
    solution = sorted(res.items())
    for group_ in solution:
        print(f"Количество чисел с {group_[0]} делителем: {group_[1]}")
 
    fig, ax = plt.subplots()
    ax.set_facecolor('seashell')
    fig.set_facecolor('floralwhite')
    fig.set_figwidth(12)
    fig.set_figheight(6)
    ax.set_ylabel("Количество чисел")
    ax.set_title("Количество делителей")
    x_s = [group_[0] for group_ in solution]
    # plt.xticks(np.arange(0, max(x_s) + 1, 5))
    y_s = [group_[1] for group_ in solution]
    # plt.yticks(np.arange(0, max(y_s) + 1, 10000))
 
    for group_ in solution:
        x = group_[0]
        y = group_[1]
        ax.bar(x, y)
 
    plt.show()
 
 
main()
Добавлено через 3 минуты
Gdez, как посчитать до миллиарда? я компьютер оставил на 16 часов и он не посчитал
0
03.03.2021, 18:48
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.03.2021, 18:48
Помогаю со студенческими работами здесь

Определить кол-во чисел, имеющих ровно 5 делителей, среди 1-го миллиона натуральных чисел
Среди первого миллиона десятичных натуральных чисел количество чисел, имеющих ровно пять делителей...

Определение суммы и кол-ва вещественных чисел принадлежащих отрезку [a,b] // Кол-во вхождений строки // Матрица
Помогите решить 3 задачи, пожалуйста! 1) Вводится последовательность вещественных чисел,...

Посчитать кол-во чисел в массиве
Сначала задаётся массив с числами, например: 15 1 1 1 2 3 5 5 7 8 8 4 3 3 3 3 Дальше задаётся...

Задача: Посчитать кол-во чисел на отрезке [l, r]
Условия Назовём натуральное число n ≥ 10 очаровательным, если оно равняется произведению своих...

Посчитать кол-во чисел попадающих в интервал [10; 15]
Учусь на нефтегазе, абсолютный чайник в паскале. Да и он в принципе мне не нужен помогите , кто...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Что такое CQRS и как это реализовать на C# с MediatR
InfoMaster 15.01.2025
Концепция CQRS и её роль в современной разработке В современном мире разработки программного обеспечения архитектурные паттерны играют ключевую роль в создании масштабируемых и поддерживаемых. . .
Как настроить CI/CD с Azure DevOps
InfoMaster 15.01.2025
CI/ CD, или непрерывная интеграция и непрерывное развертывание, представляет собой современный подход к разработке программного обеспечения, который позволяет автоматизировать и оптимизировать процесс. . .
Как настроить CI/CD с помощью Jenkins
InfoMaster 15.01.2025
Введение в CI/ CD и Jenkins В современной разработке программного обеспечения непрерывная интеграция (CI) и непрерывная доставка (CD) стали неотъемлемыми элементами процесса создания качественных. . .
Как написать микросервис на Go/Golang с Kafka и GitHub CI/CD
InfoMaster 14.01.2025
Определение микросервиса, преимущества использования Go/ Golang Микросервис – это архитектурный подход к разработке программного обеспечения, при котором приложение состоит из небольших, независимо. . .
Как написать микросервис с нуля на C# с RabbitMQ, CQRS и CI/CD
InfoMaster 14.01.2025
В современном мире разработки программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот архитектурный подход предполагает. . .
Как создать интернет-магазин на PHP и JavaScript
InfoMaster 14.01.2025
В современном мире электронная коммерция стала неотъемлемой частью бизнеса. Создание собственного интернет-магазина открывает широкие возможности для предпринимателей, позволяя достичь большей. . .
Как написать Тетрис на Ассемблере
InfoMaster 14.01.2025
Тетрис – одна из самых узнаваемых и популярных компьютерных игр, созданная в 1984 году советским программистом Алексеем Пажитновым. За прошедшие десятилетия она завоевала симпатии миллионы людей по. . .
Как создать игру "Танчики" на Unity3d и C#
InfoMaster 14.01.2025
Разработка игр – это увлекательный процесс, сочетающий в себе творчество и технические навыки. В этой статье мы рассмотрим создание классической игры "Танчики" с использованием Unity3D и языка. . .
Организую платный онлайн микро-курс по доработке Android-клиента Telegram
_Ivana 14.01.2025
Официальная версия и распространенные форки не полностью устраивают? Сделай свою кастомную версию клиента! 4 занятия по 2 часа (2 недели пн, ср 19:00-21:00 по Москве). Первое вводное занятие. . .
Как создать приложение для фитнеса для iOS/iPhone на Kotlin
InfoMaster 14.01.2025
Создание собственного фитнес-приложения — это не только захватывающий, но и полезный процесс, ведь оно может стать вашим верным помощником на пути к здоровому и активному образу жизни. В современных. . .
Как создать приложение магазина для iOS/iPhone на Swift
InfoMaster 14.01.2025
Введение в разработку iOS-приложений Разработка приложений для iPhone и других устройств на базе iOS открывает огромные возможности для создания инновационных мобильных решений. В данной статье мы. . .
Это работает. Скорость асинхронной логики велика. Вопрос видимо останется в стабильности. Плата - огонь!
Hrethgir 13.01.2025
По прошлому проекту в Logisim Evolution https:/ / www. cyberforum. ru/ blogs/ 223907/ blog8781. html прилагаю файл архива проекта в Gowin Eda. Восьмибитный счётчик из сумматора+ генератор сигнала. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru