Напишите функцию которая возвращает количество делителей натурального числа
Перейти к содержимому

Напишите функцию которая возвращает количество делителей натурального числа

  • автор:

Напишите функцию number Of Divisors, которая возвращает количество делителей натурального числа

Author24 — интернет-сервис помощи студентам

Разработать функцию, которая для заданного натурального числа N возвращает количество его делителей
И с помощью этой функции для заданного числа A вывести на экран следующее по отношению к нему.

Разработать функцию, которая для заданного натурального числа N возвращает количество его делителей
вывести на экран только те целые числа отрезка , у которых количество делителей равно заданному.

Разработать функцию, которая для заданного натурального числа N возвращает сумму его делителей
Разработать функцию, которая для заданного натурального числа N возвращает сумму его делителей. С.

Разработать функцию, которая для заданного натурального числа N возвращает число его делителей
Разработать функцию, которая для заданного натурального числа N возвращает кол-во его делителей. с.

132 / 118 / 29
Регистрация: 09.07.2019
Сообщений: 1,070
Записей в блоге: 4
th0t, есть [PYTHON][/PYTHON]
4945 / 3296 / 1142
Регистрация: 21.03.2016
Сообщений: 8,089

1 2 3 4 5 6
def sumDigRec( n ) : if n == 0: return 0 return sum([1 for i in range(1,n+1) if not n % i]) print(sumDigRec( 10 ))

Регистрация: 11.12.2019
Сообщений: 5
можешь сделать так чтобы число вводилось через int(input
4945 / 3296 / 1142
Регистрация: 21.03.2016
Сообщений: 8,089

ЦитатаСообщение от th0t Посмотреть сообщение

можешь сделать так чтобы число вводилось через int(input
можешь открыть любой учебник и почитать про функции и что такое аргументы
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Напишите функцию, которая принимает число number, и возвращает слово Google с количеством букв o, равным number
Решил попрактиковаться, нашел тренажер. Вроде все работает, но сайт выдает ошибку. Может есть.

Напишите функцию evenOrOdd, которая принимает аргумент number и возвращает ‘ Even’ , и возвращает ‘Odd’
Напишите функцию evenOrOdd, которая принимает аргумент number и возвращает "Even", и возвращает.

Реализовать функцию int function_2 (int number), которая возвращала разрядность натурального числа number
1.Реализовать функцию int function_2 (int number), которая возвращала разрядность натурального.

Разработать метод, который для заданного натурального числа N возвращает количество его делителей
Разработать метод, который для заданного натурального числа N возвращает количество его делителей.

Или воспользуйтесь поиском по форуму:

Нахождение делителей числа с помощью Python

Вот проблема, которую я недавно пытался решить: дано целое число n, каковы все его делители?

Делитель, также известный как фактор или множитель, — это такое целое число m, на которое n делится без остатка. Например, делителями числа 12 являются 1, 2, 3, 4, 6 и 12.

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

Простейший подход

Если мы хотим найти все числа, которые делят n без остатка, мы можем просто перебрать числа от 1 до n:

 
 
def get_all_divisors_brute(n): for i in range(1, int(n / 2) + 1): if n % i == 0: yield i yield n

На деле нам нужно дойти только до n/2, потому что все, что больше этого значения, гарантировано не может быть делителем n — если вы разделите n на что-то большее, чем n/2, результат не будет целым числом.

Этот код очень прост, и для малых значений n он работает достаточно хорошо, но он довольно неэффективен и медлителен в других случаях. По мере увеличения n время выполнения линейно увеличивается. Можем ли мы сделать лучше?

Факторизация

В моем проекте я работал в основном с факториалами. Факториал числа n, обозначаемый n! — это произведение всех целых чисел от 1 до n включительно. Например:

8! = 8 × 7 × 6 × 5 × 4 × 3 × 2 × 1

Поскольку факториалы состоят преимущественно из небольших множителей, я решил попробовать получить список делителей, определив сначала наименьшие из них. В частности, я искал простые множители, то есть те, которые также являются простыми числами. (Простое число — это число, единственными делителями которого являются оно само и 1. Например, 2, 3 и 5 являются простыми, а 4 и 6 — нет).

Вот функция, которая находит простые делители числа n:

 
 
def get_prime_divisors(n): i = 2 while i * i 1: yield n

Это похоже на предыдущую функцию, использующую перебор делителей: мы продолжаем пробовать множители, и если находим подходящий, то делим на него. В противном случае мы проверяем следующее число. Это довольно стандартный подход к поиску простых множителей.

Теперь мы можем использовать этот метод для получения факторизации числа, то есть для его записи в виде произведения простых чисел. Например, факторизация числа 8! выглядит следующим образом:

8! = 2^7 × 3^2 × 5 × 7

Вычисление такой факторизации относительно эффективно, особенно для факториалов, так как, поскольку все простые множители очень малы, вам не нужно делать много делений.

В теории чисел есть утверждение, называемое основной теоремой арифметики, которое гласит, что простые факторизации (разложения) уникальны: для любого числа n существует только один способ представить его в виде произведения простых множителей. (Я не буду приводить здесь доказательство, но вы можете найти его в Википедии).

Это дает нам способ находить делители путем перебора всех комбинаций простых множителей. Простые множители любого m делителя числа n должны входить в подмножество простых множителей n, иначе m не делило бы число n.

Переход от факторизации к делителям

Для начала разложим исходное число на простые множители с указанием «кратности», то есть мы должны получить список всех множителей и количество раз, которое каждый из них встречается в факторизации:

 
 
import collections def get_all_divisors(n): primes = get_prime_divisors(n) primes_counted = collections.Counter(primes) .

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

 
 
def get_all_divisors(n): . divisors_exponentiated = [ [div ** i for i in range(count + 1)] for div, count in primes_counted.items() ]

Например, для 8! представленный код выдаст нам следующее:

 
 
[ [1, 2, 4, 8, 16, 32, 64, 128], // 2^0, 2^1, . 2^7 [1, 3, 9], // 3^0, 3^1, 3^2 [1, 5], [1, 7], ]

Затем, чтобы получить делители, мы можем использовать довольно удобную функцию itertools.product, которая принимает на вход итерабельные объекты и возвращает все возможные упорядоченные комбинации их элементов. В нашем случае она выбирает по одному числу из каждого списка с возведениями в степень, а затем, перемножая их вместе, мы получаем очередной делитель n.

 
 
import itertools def calc_product(iterable): acc = 1 for i in iterable: acc *= i return acc def get_all_divisors(n): . for prime_exp_combination in itertools.product(*divisors_exponentiated): yield calc_product(prime_exp_combination)

Таким образом, мы находим все делители n (хотя, в отличие от предыдущих функций, они не отсортированы).

Собираем все вместе

Сложив все это, мы получим следующую функцию для вычисления делителей n:

 
 
import collections import itertools def get_prime_divisors(n): i = 2 while i * i 1: yield n def calc_product(iterable): acc = 1 for i in iterable: acc *= i return acc def get_all_divisors(n): primes = get_prime_divisors(n) primes_counted = collections.Counter(primes) divisors_exponentiated = [ [div ** i for i in range(count + 1)] for div, count in primes_counted.items() ] for prime_exp_combination in itertools.product(*divisors_exponentiated): yield calc_product(prime_exp_combination) print(list(get_all_divisors(40320))) # 8!

Такая реализация очень эффективна, особенно когда у вас много маленьких простых множителей, как в случае с факториалами, с которыми я работал. Я не знаю, насколько хорошо она покажет себя в общем случае, и, если вы занимаетесь серьезными научными вычислениями, я уверен, что вы легко найдете уже реализованные и оптимизированные алгоритмы для такого рода вещей.

Повторение: функции

Расстоянием от начала координат до точки ( x , y ) является величина ( x 2 + y 2 ) 1/2 .
Напишите функцию double distance(double x, double y) , возвращающую по координатам точки расстояние от этой точки до начала координат.
Напишите программу, которая считывает два целых числа x и y и выводит одно действительное число - расстояние от точки ( x , y ) до начала координат.
Для вычисления квадратного корня следует использовать стандартную функцию double sqrt(double x) .

Пример

1.41421

B: Расстояние по Манхеттену

Расстоянием по Манхеттену от начала координат до точки ( x , y ) называется величина | x |+| y |.
Напишите функцию int manhdistance(int x, int y) , возвращающую по координатам точки расстояние от этой точки до начала координат.
Напишите программу, которая считывает два целых числа x и y и выводит одно действительное число - расстояние по Манхеттену от точки ( x , y ) до начала координат.

Пример

C: Количество делителей числа

В теории чисел количество натуральных делителей натурального числа n (включая 1 и число n ) называется тау-функцией.
Напишите функцию int tau(int n) , возвращающую для данного натурального числа n количество его делителей.
Напишите программу, которая считывает число n и возвращает число делителей числа n . Сложность алгоритма может быть O( n ).

Пример

D: Сумма делителей числа

В теории чисел сумма натуральных делителей натурального числа n (включая 1 и число n ) называется сигма-функцией.
Напишите функцию int sigma(int n) , возвращающую для данного натурального числа n сумму его делителей.
Напишите программу, которая считывает число n и возвращает сумму делителей числа n . Сложность алгоритма может быть O( n ).

Пример

E: Совершенное ли число

Натуральное число n называется совершенным, если сумма его делителей, за исключением самого этого числа, равна этому же числу. Наименьшее совершенно число - 6=1+2+3.
Напишите функцию bool isperfect(int n) , которая возврашает true , если число n является совершенным и false в противном случае. Функция isperfect должна использовать значение, возвращаемое функцией sigma(n) .
Напишите программу, считывающую число n и выводящую на экран слово YES , если число совершенное и слово NO в противном случае.

Пример

F: Первые 4 совершенных числа

Напишите программу, которая выводит первые 4 совершенных числа в порядке возрастания.

G: Быстрая тау-функция

Реализуйте алгоритм вычисления тау-функции, имеющий сложность алгоритма O( n 1/2 ). Для этого необходимо перебирать делители числа n до величины n 1/2 , а не до величины n (как в алгоритме проверки числа на простоту).

Пример

H: Быстрая сигма-функция

Реализуйте алгоритм вычисления сигма-функции, имеющий сложность алгоритма O( n 1/2 ). Для этого необходимо перебирать делители числа n до величины n 1/2 , а не до величины n (как в алгоритме проверки числа на простоту).

Разработать функцию, которая для заданного натурального числа N возвращает количество его делителей

Возникла проблема с заданием, не могу найти ошибку: Разработать функцию, которая для заданного натурального числа N возвращает количество его делителей. С помощью данной функции: для заданного числа А вывести на экран следующее по отношению к нему число, имеющее столько же делителей, сколько и число А. Например, если ввести число 4, то должно вывести 6, но не ничего не выводится

def function(n): i=1 m=0 while i 

Отслеживать
задан 13 мая 2019 в 18:15
17 1 1 золотой знак 1 1 серебряный знак 5 5 бронзовых знаков

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Для 4 следующее будет 9, т.к. у 6 четыре делителя, а нечётное количество - только у квадратов

Ошибки:
- i нужно было увеличивать в любом случае
- функция должна возвращать результат
- инкремент b+=1,а не b=+1

def function(n): i=1 m=0 while i 

Отслеживать
ответ дан 13 мая 2019 в 18:32
54.3k 3 3 золотых знака 20 20 серебряных знаков 43 43 бронзовых знака

import math def countDividers(n): if n  

Отслеживать
ответ дан 10 апр 2021 в 16:59
159 7 7 бронзовых знаков

    Важное на Мете
Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.5.3.8609

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *