Нахождение максимального делителя числа python

Каков самый большой делитель числа 600851475143, являющийся простым числом?

Каков самый большой делитель числа 600851475143, являющийся простым числом?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
x = 0 num = 600851475143 sp = [] n = num def pr(n): for x in range(2, n - 1): if not n % x == 0 or n == 1: return True else: return False for i in range(1, num): if pr(i) == True and n % i == 0: sp.append(i) n = num / i if n == 1: break print(max(sp))

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

Каков самый большой делитель числа 600851475143, являющийся простым числом?
Простые делители числа 13195 — это 5, 7, 13 и 29. Каков самый большой делитель числа.

Каков самый большой делитель числа 600851475143, являющийся простым числом
Простые делители числа 13195 — это 5, 7, 13 и 29. Каков самый большой делитель числа 600851475143.

Каков самый большой делитель числа 600851475143, являющийся простым числом?
Товарищи, помогайте, потому что у меня сейчас случится дикий приступ. Вообщем, задача такая: Каков.

Самый большой делитель сложного числа, являющийся простым числом
Простые делители числа 13195 — это 5, 7, 13 и 29. Какой самый большой делитель числа.

Найти в данной последовательности число, которое имеет самый большой наибольший общий делитель с числом А
Дана последовательность из N натуральных чисел и натуральное число А. Найти в данной.

Все работает, но очень медленно. Вам бы над алгоритмом поработать.

Добавлено через 1 минуту

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

num = 600851475143 d = 2 while num != 1 and d*d  num: if num % d == 0: num //= d else: d += 1 print(num)

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

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 divisors(n): yield 1 i = 2 while i**2  n: if n % i == 0: yield i j = n // i if j != i: yield j i += 1 def prime(n): if n  2: return False if n % 2 == 0: return n == 2 if n % 3 == 0: return n == 3 i, s = 5, 2 while i**2  n: if n % i == 0: return False i += s s = 4 if s == 2 else 2 return True print(max(i for i in divisors(600851475143) if prime(i)))

Эксперт функциональных языков программированияЭксперт Python

Лучший ответ

Сообщение было отмечено mik-a-el как решение

Решение

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
def isPrime(n): i=2 while(i*in): if n%i==0: return False return True #n=600851475143 def max_prime_div(n): k=3 while(True): if n%k==0: r=n//k if isPrime(r): return r k+=2 print(max_prime_div(600851475143))

Лучший ответ

Сообщение было отмечено mik-a-el как решение

Решение

1 2 3 4 5 6 7 8 9 10 11 12 13 14
from math import sqrt n = 600851475143 i = 2 while n % i != 0 or any(n // i % j == 0 for j in range(2, int(sqrt(n // i))+1)): if i == 2: i = 3 elif i == 3: i = 5 else: i += (9 - i % 6) // 2 print(n // i)
num = 600851475143 d = 2 while num != 1 and d*d  num: if num % d == 0: num //= d else: d += 1 print(num) # Используется свойство числа , макс. делитель меньше или равен квадратному корню числа
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
''' Делается с помощью 2 методов первый просто проверяет число на простату) второй ищет самый больший делитель при условии что ] максимально допустимый делитель меньше или равен квадратному корню числа(с округлением) [given_number ** (0.5)] ''' def prime_number(number: int): a = number k = 0 for i in range(2, a // 2 + 1): if (a % i == 0): k = k + 1 if (k  0): return True def high_prime_number_division(given_number: int): list_num = [] for element in range(2, given_number): if element  round(given_number ** (0.5)): if given_number%element==0: if prime_number(element): list_num.append(element) else: return list_num[-1] print(high_prime_number_division(600851475143))

Источник

Делители числа

Делитель — это число, на которое нацело делится делимое. У делимого может быть один или несколько делителей, найти их все можно с помощью простого алгоритма, который без проблем реализуется на Python 3.

Нахождение делителей числа

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

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

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

Пользователь вводит целое число, делителей которого будет искать программа, тогда код выглядит так:

numb = int(input("Введите целое число: ")) print("Результат:", end = " ") for i in range(numb - 1, 1, -1): if (numb % i == 0): print(i, end = " ")

Например, пользователь ввёл число 625. Программа начинает цикл со значения 624, в цикле проверяется, делится ли нацело 625 на 624, затем цикл переходит на следующую итерацию и работает уже с числом 623 и так до двух. Таким образом, вывод программы будет следующим:

Введите целое число: 625 Результат: 125 25 5

Простые делители числа

Простой делитель — это делитель, который делится только на единицу и самого себя. Для нахождения простых делителей с помощью Python нужно немного модернизировать программу, добавив в неё дополнительный цикл for и переменную счётчик.

Программа построена по следующему алгоритму:

  1. Обнулить счётчик.
  2. В цикле искать делители.
  3. Если найден, искать во вложенном цикле его делители. Это для того, чтобы определить: является ли он простым.
  4. Если найден, увеличить счётчик.
  5. Если счётчик равен нулю, то число простое и надо вывести значение делителя в консоль.
  6. Перейти на следующую итерацию внешнего цикла.

Цикл теперь выглядит так:

numb = int(input("Введите целое число: ")) print("Простые:", end = " ") for i in range(numb - 1, 1, -1): is_simple = 0 # Счётчик if (numb % i == 0): for j in range(i - 1, 1, -1): if (i % j == 0): is_simple = is_simple + 1 # Увеличиваем, если находим делитель if (is_simple == 0): # Если делителей не было найдено, выводим print(i, end = " ")

Понятно, что если значение счётчика больше нуля — то число точно не простое. Можно оптимизировать немного код и сразу завершать вложенный цикл после увеличения счётчика. Для этого можно воспользоваться оператором break в условном операторе, находящемся во вложенном цикле.

Результат работы программы:

Введите целое число: 63 Простые: 7 3

Делители расположены в порядке убывания. И если надо вывести только самый большой простой делитель с помощью Python, то можно после того, как выведется первое число, воспользоваться оператором break для выхода из цикла.

Сумма делителей

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

Код программы:

numb = int(input("Введите целое число: ")) sum_of_dividers = 0 for i in range(numb - 1, 1, -1): if (numb % i == 0): sum_of_dividers += i print("Сумма:", sum_of_dividers)

Результат выполнения кода:

Введите целое число: 63 Сумма: 40

Количество делителей

Этот вариант программы также лишь незначительно отличается от изначального. Для подсчёта делителей нужно ввести переменную-счётчик, к которой будет прибавляться единица каждый раз, когда условие « numb % i == 0 » будет выполняться.

numb = int(input("Введите целое число: ")) count_of_dividers = 0 for i in range(numb - 1, 1, -1): if (numb % i == 0): count_of_dividers += 1 print("Количество равно:", count_of_dividers)

Результаты выполнения программы:

Введите целое число: 63 Количество равно: 4

Максимальный и минимальный делитель

Для нахождения минимального и максимального делителя в код на Python нужно добавить две переменные: min_divider и max_divider . В цикле делитель будет сравниваться со значением этих переменных и, если необходимо, записываться в них.

Код программы:

numb = int(input("Введите целое число: ")) min_divider = numb max_divider = 1 for i in range(numb - 1, 1, -1): if (numb % i == 0): if (min_divider > i): min_divider = i if (max_divider < i): max_divider = i print("Минимальный равен:", min_divider) print("Максимальный равен:", max_divider)

Результат выполнения:

Введите целое число: 63 Минимальный равен: 3 Максимальный равен: 21

Нахождение наименьшего и наибольшего делителя, подсчёт суммы делителей и их количества можно объединить в одну программу на Python. Это не должно вызвать каких-либо проблем или конфликтов, потому что программа работает с 4 независимыми переменными.

Источник

Читайте также:  Делаем личный кабинет php
Оцените статью