Пытаясь определить наибольший простой множитель числа 600851475143, я нашел в Интернете программу, которая, похоже, работает. Проблема в том, что мне трудно понять, как именно это работает, хотя я понимаю основы того, что делает программа. Кроме того, мне бы хотелось, чтобы вы пролили немного света на любой известный вам метод поиска простых множителей, возможно, без проверки каждого числа, и на то, как работает ваш метод.
Вот код, который я нашел в Интернете для факторизации простых чисел [ПРИМЕЧАНИЕ. Этот код неверен. См. ответ Стефана ниже для лучшего кода.]:
n = 600851475143
i = 2
while i * i < n:
while n % i == 0:
n = n / i
i = i + 1
print(n)
#takes about ~0.01secs
Почему этот код намного быстрее, чем этот код, который предназначен только для проверки скорости и не имеет никакой другой реальной цели?
Вопрос из двух частей: [list] [*]Пытаясь определить наибольший простой множитель числа 600851475143, я нашел в Интернете программу, которая, похоже, работает. Проблема в том, что мне трудно понять, как именно это работает, хотя я понимаю основы того, что делает программа. Кроме того, мне бы хотелось, чтобы вы пролили немного света на любой известный вам метод поиска простых множителей, возможно, без проверки каждого числа, и на то, как работает ваш метод. [/list] Вот код, который я нашел в Интернете для факторизации простых чисел [b][ПРИМЕЧАНИЕ. Этот код неверен. См. ответ Стефана ниже для лучшего кода.][/b]: n = 600851475143 i = 2 while i * i < n: while n % i == 0: n = n / i i = i + 1
print(n)
#takes about ~0.01secs
[list] [*]Почему этот код намного быстрее, чем этот код, который предназначен только для проверки скорости и не имеет никакой другой реальной цели? [/list]
Я пытаюсь создать алгоритм, который показывает, из каких простых чисел состоит число. Я создал следующий код (не оптимизированный), который делит число на два числа, из которых оно состоит. Затем я делаю это, пока не найду, из каких базовых чисел...
Я пытаюсь создать алгоритм, который показывает, из каких простых чисел состоит число. Я создал следующий код (не оптимизированный), который делит число на два числа, из которых оно состоит. Затем я делаю это, пока не найду, из каких базовых чисел...
Например, входное значение равно 20
Потому что 12+(1+2)+(3+2)=20
12 — это x из 20, поэтому у нас есть целое число для x, и мы должны return Да
И я хочу закодировать это на Python
Я попробовал проделать этот процесс для каждого числа в диапазоне...
Я пытаюсь организовать эксперимент, в котором я сравниваю алгоритмы поиска на упорядоченных массивах. Пространства, но я получаю противоположные результаты.
Вот минимальный воспроизводимый пример:
import time
import random
''''
search algorithms...