Разложение на простые множители алгоритм: Разложение числа на множители

Содержание

Разложение чисел на простые множители: способы и примеры разложения

Данная статья дает ответы на вопрос о разложении числа на простыне множители. Рассмотрим общее представление о разложении с примерами. Разберем каноническую форму разложения и его алгоритм. Будут рассмотрены все альтернативные способы при помощи использования признаков делимости и таблицы умножения.

Что значит разложить число на простые множители?

Разберем понятие простые множители. Известно, что каждый простой множитель – это простое число. В произведении вида 2·7·7·23 имеем, что у нас 4 простых множителя в виде 2,7,7,23.

Разложение на множители предполагает его представление в виде произведений простых. Если нужно произвести разложение числа 30, тогда получим 2,3,5. Запись примет вид 30=2·3·5. Не исключено, что множители могут повторяться. Такое число как 144 имеет 144=2·2·2·2·3·3.

Не все числа предрасположены к разложению. Числа, которые больше 1 и являются целыми можно разложить на множители. Простые числа при разложении делятся только на 1 и на самого себя, поэтому невозможно представить эти числа в виде произведения.

При z, относящемуся к целым числам, представляется  в виде произведения а и b, где z делится на а и на b. Составные числа раскладывают на простые множители при помощи основной теоремы арифметики. Если число больше 1, то его разложение на множители p1, p2, …, pnпринимает вид a=p1, p2, …, pn. Разложение предполагается в единственном варианте.

Каноническое разложение числа на простые множители

При разложении множители могут повторяться. Их запись выполняется компактно при помощи степени. Если при разложении числа а имеем множитель p1, который встречается s1 раз и так далее pn – sn раз. Таким образом разложение примет вид a=p1s1·a=p1s1·p2s2·…·pnsn. Эта запись имеет название канонического разложения числа на простые множители.

При разложении числа 609840 получим, что 609 840=2·2·2·2·3·3·5·7·11·11,его канонический вид будет 609 840=24·32·5·7·112. При помощи канонического разложения можно найти все делители числа и их количество.

Алгоритм разложения числа на простые множители

Чтобы правильно разложить на множители необходимо иметь представление о простых и составных числах. Смысл заключается в том, чтобы получить последовательное количество делителей вида p1, p2, …,pnчисел a, a1, a2, …, an-1, это дает возможность получить a=p1·a1, где a1=a:p1, a=p1·a1=p1·p2·a2, где a2=a1:p2, …, a=p1·p2·…·pn·an, где an=an-1:pn. При получении an=1, то равенство a=p1·p2·…·pn  получим искомое разложение числа а на простые множители. Заметим, что p1≤p2≤p3≤…≤pn.

Для нахождения наименьших общих делителей необходимо использовать таблицу простых чисел. Это выполняется на примере нахождения наименьшего простого делителя числа z. При взятии простых чисел 2,3,5,11 и так далее, причем на них делим число z. Так как z не является простым числом, следует учитывать, что наименьшим простым делителем не будет больше z.  Видно, что не существуют делителей z, тогда понятно, что z является простым числом.

Пример 1

Рассмотрим на примере числа 87.  При его делении на 2 имеем, что 87:2=43  с остатком равным 1. Отсюда следует, что 2 делителем не может являться, деление должно производиться нацело. При делении на 3 получим, что 87:3=29. Отсюда вывод – 3 является наименьшим простым делителем числа 87.

При разложении на простые множители необходимо пользоваться таблицей простых чисел, где a.  При разложении 95 следует использовать около 10 простых чисел, а при 846653 около 1000.

Рассмотрим алгоритм разложения на простые множители:

  • нахождение наименьшего множителя при делителе p1 числа a по формуле a1=a:p1, когда a1=1, тогда а является простым числом и включено в разложение на множители, когда не равняется 1, тогда a=p1·a1и следуем к пункту, находящемуся ниже;
  • нахождение простого делителя p2 числа a1при помощи последовательного перебора простых чисел, используя a2=a1:p2, когда a2=1, тогда разложение примет вид a=p1·p2, когда a2=1, тогда a=p1·p2·a2, причем производим переход к следующему шагу;
  • перебор простых чисел и нахождение простого делителя p3 числа a2по формуле a3=a2:p3, когда a3=1, тогда получим, что a=p1·p2·p3, когда не равняется 1, тогда a=p1·p2·p3·a3и производим переход к следующему шагу;
  • производится нахождение простого делителя pn числа an-1при помощи перебора простых чисел с pn-1, а также an=an-1:pn, где an=1, шаг является завершающим, в итоге получаем, что a=p1·p2·…·pn.

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

Полученный алгоритм можно применять при помощи разложения чисел на простые множители.

Примеры разложения на простые множители

Во время разложения на простые множители следует придерживаться основного алгоритма.

Нужна помощь преподавателя?

Опиши задание — и наши эксперты тебе помогут!

Описать задание

Пример 2

Произвести разложение числа 78 на простые множители.

Решение

Для того, чтобы найти наименьший простой делитель, необходимо перебрать все простые числа, имеющиеся в 78. То есть 78:2=39. Деление без остатка, значит это первый простой делитель, который обозначим как p1. Получаем, что a1=a:p1=78:2=39. Пришли к равенству вида a=p1·a1, где 78=2·39. Тогда a1=39, то есть следует перейти к следующему шагу.

Остановимся на нахождении простого делителя p2 числа a1=39. Следует перебрать простые числа, то есть 39:2=19 (ост. 1). Так как деление с остатком, что 2 не является делителем. При выборе числа 3 получаем, что 39:3=13. Значит, что p2=3 является наименьшим простым делителем 39 по a2=a1:p2=39:3=13. Получим равенство вида a=p1·p2·a2 в виде 78=2·3·13. Имеем, что a2=13 не равно 1, тогда следует переходит дальше.

Наименьший простой делитель числа a2=13 ищется при помощи перебора чисел, начиная с 3. Получим, что 13:3=4 (ост. 1). Отсюда видно, что 13 не делится на 5,7,11, потому как 13:5=2 (ост. 3), 13:7=1 (ост. 6) и 13:11=1 (ост. 2). Видно, что 13 является простым числом. По формуле выглядит так: a3=a2:p3=13:13=1. Получили, что a3=1, что означает завершение алгоритма. Теперь множители записываются в виде 78=2·3·13(a=p1·p2·p3).

Ответ: 78=2·3·13.

Пример 3

Разложить число 83 006 на простые множители.

Решение

Первый шаг предусматривает разложение на простые множители p1=2 и a1=a:p1=83 006:2=41 503, где 83 006=2·41 503.

Второй шаг предполагает, что 2, 3 и 5 не простые делители для числа a1=41 503, а 7 простой делитель, потому как 41 503:7=5 929. Получаем, что p2=7, a2=a1:p2=41 503:7=5 929. Очевидно, что 83 006=2·7·5 929.

Нахождение наименьшего простого делителя p4 к числу a3=847 равняется 7. Видно, что a4=a3:p4=847:7=121, поэтому 83 006=2·7·7·7·121.

Для нахождения простого делителя числа a4=121 используем число 11, то есть p5=11. Тогда получим выражение вида a5=a4:p5=121:11=11, и 83 006=2·7·7·7·11·11.

Для числа a5=11 число p6=11является наименьшим простым делителем. Отсюда a6=a5:p6=11:11=1. Тогда a6=1. Это указывает на завершение алгоритма. Множители запишутся в виде 83 006=2·7·7·7·11·11.

Каноническая запись ответа примет вид 83 006=2·73·112.

Ответ: 83 006=2·7·7·7·11·11=2·73·112.

Пример 4

Произвести разложение числа 897 924 289 на множители.

Решение

Для нахождения первого простого множителя произвести перебор простых чисел, начиная с 2. Конец перебора приходится на число 937. Тогда p1=937, a1=a:p1=897 924 289:937=958 297 и 897 924 289=937·958 297.

Второй шаг алгоритма заключается в переборе  меньших простых чисел. То есть начинаем с числа 937.  Число 967 можно считать простым, потому как оно является простым делителем числа a1=958 297. Отсюда получаем, что p2=967, то a2=a1:p1=958 297:967=991 и 897 924 289=937·967·991.

Третий шаг говорит о том, что 991 является простым числом, так как не имеет ни одного простого делителя, который не превосходит 991. Примерное значение подкоренного выражения имеет вид 991<402. Иначе запишем как 991<402. Отсюда видно, что p3=991 и a3=a2:p3=991:991=1. Получим, что разложение числа 897 924 289 на простые множители получается как  897 924 289=937·967·991.

Ответ: 897 924 289=937·967·991.

Использование признаков делимости для разложения на простые множители

Чтобы разложить число на простые множители, нужно придерживаться алгоритма. Когда имеются небольшие числа, то допускается использование таблицы умножения и признаков делимости. Это рассмотрим на примерах.

Пример 5

Если необходимо произвести разложение на множители 10, то по таблице видно: 2·5=10. Получившиеся числа 2 и 5 являются простыми, поэтому они являются простыми множителями для числа 10.

Пример 6

Если необходимо произвести разложение числа 48, то  по таблице видно: 48=6·8. Но 6 и 8 – это не простые множители, так как их можно еще разложить как 6=2·3 и 8=2·4. Тогда полное разложение отсюда получается как 48=6·8=2·3·2·4. Каноническая запись примет вид 48=24·3.

Пример 7

При разложении числа 3400 можно пользоваться признаками делимости. В данном случае актуальны признаки делимости на 10 и на 100. Отсюда получаем, что 3 400=34·100, где 100 можно разделить на 10, то есть записать в виде 100=10·10, а значит, что 3 400=34·10·10. Основываясь на признаке делимости получаем, что 3 400=34·10·10=2·17·2·5·2·5. Все множители простые. Каноническое разложение принимает вид 3 400=23·52·17.

Когда мы находим простые множители, необходимо использовать признаки делимости и таблицу умножения. Если представить число 75 в виде произведения множителей, то необходимо учитывать правило делимости на 5. Получим, что 75=5·15, причем 15=3·5. То есть искомое разложение пример вид произведения 75=5·3·5.

Разложение чисел на простые множители: способы и примеры разложения

Данная статья дает ответы на вопрос о разложении числа на простыне множители. Рассмотрим общее представление о разложении с примерами. Разберем каноническую форму разложения и его алгоритм. Будут рассмотрены все альтернативные способы при помощи использования признаков делимости и таблицы умножения.

Что значит разложить число на простые множители?

Разберем понятие простые множители. Известно, что каждый простой множитель – это простое число. В произведении вида 2·7·7·23 имеем, что у нас 4 простых множителя в виде 2,7,7,23.

Разложение на множители предполагает его представление в виде произведений простых. Если нужно произвести разложение числа 30, тогда получим 2,3,5. Запись примет вид 30=2·3·5. Не исключено, что множители могут повторяться. Такое число как 144 имеет 144=2·2·2·2·3·3.

Не все числа предрасположены к разложению. Числа, которые больше 1 и являются целыми можно разложить на множители. Простые числа при разложении делятся только на 1 и на самого себя, поэтому невозможно представить эти числа в виде произведения.

При z, относящемуся к целым числам, представляется  в виде произведения а и b, где z делится на а и на b. Составные числа раскладывают на простые множители при помощи основной теоремы арифметики. Если число больше 1, то его разложение на множители p1, p2, …, pnпринимает вид a=p1, p2, …, pn. Разложение предполагается в единственном варианте.

Каноническое разложение числа на простые множители

При разложении множители могут повторяться. Их запись выполняется компактно при помощи степени. Если при разложении числа а имеем множитель p1, который встречается s1 раз и так далее pn – sn раз. Таким образом разложение примет вид a=p1s1·a=p1s1·p2s2·…·pnsn. Эта запись имеет название канонического разложения числа на простые множители.

При разложении числа 609840 получим, что 609 840=2·2·2·2·3·3·5·7·11·11,его канонический вид будет 609 840=24·32·5·7·112. При помощи канонического разложения можно найти все делители числа и их количество.

Алгоритм разложения числа на простые множители

Чтобы правильно разложить на множители необходимо иметь представление о простых и составных числах. Смысл заключается в том, чтобы получить последовательное количество делителей вида p1, p2, …,pnчисел a, a1, a2, …, an-1, это дает возможность получить a=p1·a1, где a1=a:p1, a=p1·a1=p1·p2·a2, где a2=a1:p2, …, a=p1·p2·…·pn·an, где an=an-1:pn. При получении an=1, то равенство a=p1·p2·…·pn  получим искомое разложение числа а на простые множители. Заметим, что p1≤p2≤p3≤…≤pn.

Для нахождения наименьших общих делителей необходимо использовать таблицу простых чисел. Это выполняется на примере нахождения наименьшего простого делителя числа z. При взятии простых чисел 2,3,5,11 и так далее, причем на них делим число z. Так как z не является простым числом, следует учитывать, что наименьшим простым делителем не будет больше z.  Видно, что не существуют делителей z, тогда понятно, что z является простым числом.

Пример 1

Рассмотрим на примере числа 87.  При его делении на 2 имеем, что 87:2=43  с остатком равным 1. Отсюда следует, что 2 делителем не может являться, деление должно производиться нацело. При делении на 3 получим, что 87:3=29. Отсюда вывод – 3 является наименьшим простым делителем числа 87.

При разложении на простые множители необходимо пользоваться таблицей простых чисел, где a.  При разложении 95 следует использовать около 10 простых чисел, а при 846653 около 1000.

Рассмотрим алгоритм разложения на простые множители:

  • нахождение наименьшего множителя при делителе p1 числа a по формуле a1=a:p1, когда a1=1, тогда а является простым числом и включено в разложение на множители, когда не равняется 1, тогда a=p1·a1и следуем к пункту, находящемуся ниже;
  • нахождение простого делителя p2 числа a1при помощи последовательного перебора простых чисел, используя a2=a1:p2, когда a2=1, тогда разложение примет вид a=p1·p2, когда a2=1, тогда a=p1·p2·a2, причем производим переход к следующему шагу;
  • перебор простых чисел и нахождение простого делителя p3 числа a2по формуле a3=a2:p3, когда a3=1, тогда получим, что a=p1·p2·p3, когда не равняется 1, тогда a=p1·p2·p3·a3и производим переход к следующему шагу;
  • производится нахождение простого делителя pn числа an-1при помощи перебора простых чисел с pn-1, а также an=an-1:pn, где an=1, шаг является завершающим, в итоге получаем, что a=p1·p2·…·pn.

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

Полученный алгоритм можно применять при помощи разложения чисел на простые множители.

Примеры разложения на простые множители

Во время разложения на простые множители следует придерживаться основного алгоритма.

Нужна помощь преподавателя?

Опиши задание — и наши эксперты тебе помогут!

Описать задание

Пример 2

Произвести разложение числа 78 на простые множители.

Решение

Для того, чтобы найти наименьший простой делитель, необходимо перебрать все простые числа, имеющиеся в 78. То есть 78:2=39. Деление без остатка, значит это первый простой делитель, который обозначим как p1. Получаем, что a1=a:p1=78:2=39. Пришли к равенству вида a=p1·a1, где 78=2·39. Тогда a1=39, то есть следует перейти к следующему шагу.

Остановимся на нахождении простого делителя p2 числа a1=39. Следует перебрать простые числа, то есть 39:2=19 (ост. 1). Так как деление с остатком, что 2 не является делителем. При выборе числа 3 получаем, что 39:3=13. Значит, что p2=3 является наименьшим простым делителем 39 по a2=a1:p2=39:3=13. Получим равенство вида a=p1·p2·a2 в виде 78=2·3·13. Имеем, что a2=13 не равно 1, тогда следует переходит дальше.

Наименьший простой делитель числа a2=13 ищется при помощи перебора чисел, начиная с 3. Получим, что 13:3=4 (ост. 1). Отсюда видно, что 13 не делится на 5,7,11, потому как 13:5=2 (ост. 3), 13:7=1 (ост. 6) и 13:11=1 (ост. 2). Видно, что 13 является простым числом. По формуле выглядит так: a3=a2:p3=13:13=1. Получили, что a3=1, что означает завершение алгоритма. Теперь множители записываются в виде 78=2·3·13(a=p1·p2·p3).

Ответ: 78=2·3·13.

Пример 3

Разложить число 83 006 на простые множители.

Решение

Первый шаг предусматривает разложение на простые множители p1=2 и a1=a:p1=83 006:2=41 503, где 83 006=2·41 503.

Второй шаг предполагает, что 2, 3 и 5 не простые делители для числа a1=41 503, а 7 простой делитель, потому как 41 503:7=5 929. Получаем, что p2=7, a2=a1:p2=41 503:7=5 929. Очевидно, что 83 006=2·7·5 929.

Нахождение наименьшего простого делителя p4 к числу a3=847 равняется 7. Видно, что a4=a3:p4=847:7=121, поэтому 83 006=2·7·7·7·121.

Для нахождения простого делителя числа a4=121 используем число 11, то есть p5=11. Тогда получим выражение вида a5=a4:p5=121:11=11, и 83 006=2·7·7·7·11·11.

Для числа a5=11 число p6=11является наименьшим простым делителем. Отсюда a6=a5:p6=11:11=1. Тогда a6=1. Это указывает на завершение алгоритма. Множители запишутся в виде 83 006=2·7·7·7·11·11.

Каноническая запись ответа примет вид 83 006=2·73·112.

Ответ: 83 006=2·7·7·7·11·11=2·73·112.

Пример 4

Произвести разложение числа 897 924 289 на множители.

Решение

Для нахождения первого простого множителя произвести перебор простых чисел, начиная с 2. Конец перебора приходится на число 937. Тогда p1=937, a1=a:p1=897 924 289:937=958 297 и 897 924 289=937·958 297.

Второй шаг алгоритма заключается в переборе  меньших простых чисел. То есть начинаем с числа 937.  Число 967 можно считать простым, потому как оно является простым делителем числа a1=958 297. Отсюда получаем, что p2=967, то a2=a1:p1=958 297:967=991 и 897 924 289=937·967·991.

Третий шаг говорит о том, что 991 является простым числом, так как не имеет ни одного простого делителя, который не превосходит 991. Примерное значение подкоренного выражения имеет вид 991<402. Иначе запишем как 991<402. Отсюда видно, что p3=991 и a3=a2:p3=991:991=1. Получим, что разложение числа 897 924 289 на простые множители получается как  897 924 289=937·967·991.

Ответ: 897 924 289=937·967·991.

Использование признаков делимости для разложения на простые множители

Чтобы разложить число на простые множители, нужно придерживаться алгоритма. Когда имеются небольшие числа, то допускается использование таблицы умножения и признаков делимости. Это рассмотрим на примерах.

Пример 5

Если необходимо произвести разложение на множители 10, то по таблице видно: 2·5=10. Получившиеся числа 2 и 5 являются простыми, поэтому они являются простыми множителями для числа 10.

Пример 6

Если необходимо произвести разложение числа 48, то  по таблице видно: 48=6·8. Но 6 и 8 – это не простые множители, так как их можно еще разложить как 6=2·3 и 8=2·4. Тогда полное разложение отсюда получается как 48=6·8=2·3·2·4. Каноническая запись примет вид 48=24·3.

Пример 7

При разложении числа 3400 можно пользоваться признаками делимости. В данном случае актуальны признаки делимости на 10 и на 100. Отсюда получаем, что 3 400=34·100, где 100 можно разделить на 10, то есть записать в виде 100=10·10, а значит, что 3 400=34·10·10. Основываясь на признаке делимости получаем, что 3 400=34·10·10=2·17·2·5·2·5. Все множители простые. Каноническое разложение принимает вид 3 400=23·52·17.

Когда мы находим простые множители, необходимо использовать признаки делимости и таблицу умножения. Если представить число 75 в виде произведения множителей, то необходимо учитывать правило делимости на 5. Получим, что 75=5·15, причем 15=3·5. То есть искомое разложение пример вид произведения 75=5·3·5.

Разложение чисел на простые множители: способы и примеры разложения

Данная статья дает ответы на вопрос о разложении числа на простыне множители. Рассмотрим общее представление о разложении с примерами. Разберем каноническую форму разложения и его алгоритм. Будут рассмотрены все альтернативные способы при помощи использования признаков делимости и таблицы умножения.

Что значит разложить число на простые множители?

Разберем понятие простые множители. Известно, что каждый простой множитель – это простое число. В произведении вида 2·7·7·23 имеем, что у нас 4 простых множителя в виде 2,7,7,23.

Разложение на множители предполагает его представление в виде произведений простых. Если нужно произвести разложение числа 30, тогда получим 2,3,5. Запись примет вид 30=2·3·5. Не исключено, что множители могут повторяться. Такое число как 144 имеет 144=2·2·2·2·3·3.

Не все числа предрасположены к разложению. Числа, которые больше 1 и являются целыми можно разложить на множители. Простые числа при разложении делятся только на 1 и на самого себя, поэтому невозможно представить эти числа в виде произведения.

При z, относящемуся к целым числам, представляется  в виде произведения а и b, где z делится на а и на b. Составные числа раскладывают на простые множители при помощи основной теоремы арифметики. Если число больше 1, то его разложение на множители p1, p2, …, pnпринимает вид a=p1, p2, …, pn. Разложение предполагается в единственном варианте.

Каноническое разложение числа на простые множители

При разложении множители могут повторяться. Их запись выполняется компактно при помощи степени. Если при разложении числа а имеем множитель p1, который встречается s1 раз и так далее pn – sn раз. Таким образом разложение примет вид a=p1s1·a=p1s1·p2s2·…·pnsn. Эта запись имеет название канонического разложения числа на простые множители.

При разложении числа 609840 получим, что 609 840=2·2·2·2·3·3·5·7·11·11,его канонический вид будет 609 840=24·32·5·7·112. При помощи канонического разложения можно найти все делители числа и их количество.

Алгоритм разложения числа на простые множители

Чтобы правильно разложить на множители необходимо иметь представление о простых и составных числах. Смысл заключается в том, чтобы получить последовательное количество делителей вида p1, p2, …,pnчисел a, a1, a2, …, an-1, это дает возможность получить a=p1·a1, где a1=a:p1, a=p1·a1=p1·p2·a2, где a2=a1:p2, …, a=p1·p2·…·pn·an, где an=an-1:pn. При получении an=1, то равенство a=p1·p2·…·pn  получим искомое разложение числа а на простые множители. Заметим, что p1≤p2≤p3≤…≤pn.

Для нахождения наименьших общих делителей необходимо использовать таблицу простых чисел. Это выполняется на примере нахождения наименьшего простого делителя числа z. При взятии простых чисел 2,3,5,11 и так далее, причем на них делим число z. Так как z не является простым числом, следует учитывать, что наименьшим простым делителем не будет больше z.  Видно, что не существуют делителей z, тогда понятно, что z является простым числом.

Пример 1

Рассмотрим на примере числа 87.  При его делении на 2 имеем, что 87:2=43  с остатком равным 1. Отсюда следует, что 2 делителем не может являться, деление должно производиться нацело. При делении на 3 получим, что 87:3=29. Отсюда вывод – 3 является наименьшим простым делителем числа 87.

При разложении на простые множители необходимо пользоваться таблицей простых чисел, где a.  При разложении 95 следует использовать около 10 простых чисел, а при 846653 около 1000.

Рассмотрим алгоритм разложения на простые множители:

  • нахождение наименьшего множителя при делителе p1 числа a по формуле a1=a:p1, когда a1=1, тогда а является простым числом и включено в разложение на множители, когда не равняется 1, тогда a=p1·a1и следуем к пункту, находящемуся ниже;
  • нахождение простого делителя p2 числа a1при помощи последовательного перебора простых чисел, используя a2=a1:p2, когда a2=1, тогда разложение примет вид a=p1·p2, когда a2=1, тогда a=p1·p2·a2, причем производим переход к следующему шагу;
  • перебор простых чисел и нахождение простого делителя p3 числа a2по формуле a3=a2:p3, когда a3=1, тогда получим, что a=p1·p2·p3, когда не равняется 1, тогда a=p1·p2·p3·a3и производим переход к следующему шагу;
  • производится нахождение простого делителя pn числа an-1при помощи перебора простых чисел с pn-1, а также an=an-1:pn, где an=1, шаг является завершающим, в итоге получаем, что a=p1·p2·…·pn.

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

Полученный алгоритм можно применять при помощи разложения чисел на простые множители.

Примеры разложения на простые множители

Во время разложения на простые множители следует придерживаться основного алгоритма.

Нужна помощь преподавателя?

Опиши задание — и наши эксперты тебе помогут!

Описать задание

Пример 2

Произвести разложение числа 78 на простые множители.

Решение

Для того, чтобы найти наименьший простой делитель, необходимо перебрать все простые числа, имеющиеся в 78. То есть 78:2=39. Деление без остатка, значит это первый простой делитель, который обозначим как p1. Получаем, что a1=a:p1=78:2=39. Пришли к равенству вида a=p1·a1, где 78=2·39. Тогда a1=39, то есть следует перейти к следующему шагу.

Остановимся на нахождении простого делителя p2 числа a1=39. Следует перебрать простые числа, то есть 39:2=19 (ост. 1). Так как деление с остатком, что 2 не является делителем. При выборе числа 3 получаем, что 39:3=13. Значит, что p2=3 является наименьшим простым делителем 39 по a2=a1:p2=39:3=13. Получим равенство вида a=p1·p2·a2 в виде 78=2·3·13. Имеем, что a2=13 не равно 1, тогда следует переходит дальше.

Наименьший простой делитель числа a2=13 ищется при помощи перебора чисел, начиная с 3. Получим, что 13:3=4 (ост. 1). Отсюда видно, что 13 не делится на 5,7,11, потому как 13:5=2 (ост. 3), 13:7=1 (ост. 6) и 13:11=1 (ост. 2). Видно, что 13 является простым числом. По формуле выглядит так: a3=a2:p3=13:13=1. Получили, что a3=1, что означает завершение алгоритма. Теперь множители записываются в виде 78=2·3·13(a=p1·p2·p3).

Ответ: 78=2·3·13.

Пример 3

Разложить число 83 006 на простые множители.

Решение

Первый шаг предусматривает разложение на простые множители p1=2 и a1=a:p1=83 006:2=41 503, где 83 006=2·41 503.

Второй шаг предполагает, что 2, 3 и 5 не простые делители для числа a1=41 503, а 7 простой делитель, потому как 41 503:7=5 929. Получаем, что p2=7, a2=a1:p2=41 503:7=5 929. Очевидно, что 83 006=2·7·5 929.

Нахождение наименьшего простого делителя p4 к числу a3=847 равняется 7. Видно, что a4=a3:p4=847:7=121, поэтому 83 006=2·7·7·7·121.

Для нахождения простого делителя числа a4=121 используем число 11, то есть p5=11. Тогда получим выражение вида a5=a4:p5=121:11=11, и 83 006=2·7·7·7·11·11.

Для числа a5=11 число p6=11является наименьшим простым делителем. Отсюда a6=a5:p6=11:11=1. Тогда a6=1. Это указывает на завершение алгоритма. Множители запишутся в виде 83 006=2·7·7·7·11·11.

Каноническая запись ответа примет вид 83 006=2·73·112.

Ответ: 83 006=2·7·7·7·11·11=2·73·112.

Пример 4

Произвести разложение числа 897 924 289 на множители.

Решение

Для нахождения первого простого множителя произвести перебор простых чисел, начиная с 2. Конец перебора приходится на число 937. Тогда p1=937, a1=a:p1=897 924 289:937=958 297 и 897 924 289=937·958 297.

Второй шаг алгоритма заключается в переборе  меньших простых чисел. То есть начинаем с числа 937.  Число 967 можно считать простым, потому как оно является простым делителем числа a1=958 297. Отсюда получаем, что p2=967, то a2=a1:p1=958 297:967=991 и 897 924 289=937·967·991.

Третий шаг говорит о том, что 991 является простым числом, так как не имеет ни одного простого делителя, который не превосходит 991. Примерное значение подкоренного выражения имеет вид 991<402. Иначе запишем как 991<402. Отсюда видно, что p3=991 и a3=a2:p3=991:991=1. Получим, что разложение числа 897 924 289 на простые множители получается как  897 924 289=937·967·991.

Ответ: 897 924 289=937·967·991.

Использование признаков делимости для разложения на простые множители

Чтобы разложить число на простые множители, нужно придерживаться алгоритма. Когда имеются небольшие числа, то допускается использование таблицы умножения и признаков делимости. Это рассмотрим на примерах.

Пример 5

Если необходимо произвести разложение на множители 10, то по таблице видно: 2·5=10. Получившиеся числа 2 и 5 являются простыми, поэтому они являются простыми множителями для числа 10.

Пример 6

Если необходимо произвести разложение числа 48, то  по таблице видно: 48=6·8. Но 6 и 8 – это не простые множители, так как их можно еще разложить как 6=2·3 и 8=2·4. Тогда полное разложение отсюда получается как 48=6·8=2·3·2·4. Каноническая запись примет вид 48=24·3.

Пример 7

При разложении числа 3400 можно пользоваться признаками делимости. В данном случае актуальны признаки делимости на 10 и на 100. Отсюда получаем, что 3 400=34·100, где 100 можно разделить на 10, то есть записать в виде 100=10·10, а значит, что 3 400=34·10·10. Основываясь на признаке делимости получаем, что 3 400=34·10·10=2·17·2·5·2·5. Все множители простые. Каноническое разложение принимает вид 3 400=23·52·17.

Когда мы находим простые множители, необходимо использовать признаки делимости и таблицу умножения. Если представить число 75 в виде произведения множителей, то необходимо учитывать правило делимости на 5. Получим, что 75=5·15, причем 15=3·5. То есть искомое разложение пример вид произведения 75=5·3·5.

Разложение числа на множители онлайн

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

Что такое разложение числа на множители?

Любое натуральное число можно представить в виде
произведения простых чисел. Это представление называется разложением
числа на простые множители
.

Натуральное число называется делителем целого числа если для подходящего целого числа верно
равенство . В этом случае говорят, что делится на или что число кратно
числу
.

Простым числом называют натуральное число , делящееся только на себя и на единицу. Составным
числом
называют число, имеющее больше двух различных делителей (любое натуральное число не равное
имеет как минимум два делителя: и ). Например, числа – простые, а числа – составные.

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

Как разложить число на множители?

В школе на уроках математики разложение числа на множители обычно записывают столбиком в две колонки. Делается это
так: в левую колонку выписываем исходное число, затем

  • Берём самое маленькое простое число — 2 и по признакам
    делимости или обычным делением проверяем, делится ли исходное число на 2.
  • Если делится, то в правую колонку выписываем 2. Далее делим исходное число на 2 и записываем результат в левую
    колонку под исходным числом.
  • Если не делится, то берём следующее простое число — 3.

Повторяем эти шаги, при этом работаем уже с последним числом в левой колонке и с текущим простым числом. Разложение
заканчивается, когда в левой колонке будет записано число 1.

Чтобы лучше понять алгоритм, разберём несколько примеров.

Пример. Разложить на множители число 84.

Решение. Записываем число 84 в левую колонку:

Берём первое простое число — два и проверяем, делится ли 84 на 2. Так как 84 оканчивается на 4, а 4 делится на 2,
то и 84 делится на 2 по признаку делимости. Записываем 2 в
правую колонку. 84:2 = 42, число 42 записываем в левую колонку. Получили вот что:

Теперь работаем уже с числом 42. Число 42 делится на 2, поэтому записываем 2 в правую колонку, 42:2 = 21, число
21 записываем в левую колонку.

Число 21 на 2 не делится, поэтому проверяем его делимость на следующее простое число — 3. Число 21 делится на 3,
21:3 = 7. Записали 3 в правую колонку, 7 — в левую. Получили

Число 7 — простое число, поэтому в правой колонке записываем 7, в левую пишем 1. В итоге получили:

Всё, число разложено!

В результате в правой колонке оказались записаны все простые множители числа 84. То есть 84=2∙2∙3∙7.

О калькуляторе

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

e-olymp 842. Разложение на простые множители

Іванов Вячеслав Володимирович (22)
Ілларіонова Марія Валеріївна (20)
Зелінський Вячеслав Олександрович (19)
Вустянюк Ігор Дмитрович (19)
Сплошнов Кирилл (18)
Таран Таня (17)
Гордийчук Вадим (15)
Сорокіна Поліна Юріївна (14)
Царев Николай Александрович (14)
Денисова Ольга (14)
Швандт Максим Альбертович (14)
Байков Дмитро (14)
Корнилова Таня (14)
Калачьов Андрій Сергійович (14)
Осецимський Анатолій Вадимович (14)
Марченко Філіп Олександрович (13)
Молоканов Юрий (13)
Сабиров Ильдар (13)
Бронфен-Бова Роман (13)
Фесенко Катерина Володимирівна (12)
Максимова Женя (12)
Григорян Артак (12)
Карташов Денис Геннадійович (12)
Кондратюк Настя (12)
Куленюк Денис Віталійович (12)
Недомовний Владислав (12)
Писова Катя (12)
Карагяур Мілан Сергійович (12)
Волков Кирилл (11)
Кудымовская Вика (11)
Шохина Аня (11)
Яроцкий Андрей (11)
Божик Семен (11)
Прокопов Эммануил (11)
Ковальський Олександр Дмитрович (11)
Загинайло Павел (11)
Кваша Дар`я Михайлівна (11)
Янішевська Альона Русланівна (11)
Коциевский Станислав (11)
Сіренко Валерія Сергіївна (10)
Андриеш Валентина (10)
Фирсов Тимур (10)
Филипчук Настя (10)
Коломеец Александр (10)
Гончарова Алина (10)
Онищенко Александр (10)
Куперман Антон (10)
Ялымова Иванна (10)
Грешилов Константин (10)
Сиденко Радик (9)
Стеблинський Ігор Віталійович (9)
Мороз Дима (9)
Бровко Ілля (9)
Локтев Антон (9)
Лисовой Андрей (8)
Носов Максим (8)
Андреев Даниил (8)
Веремйов Кирил (8)
Панько Настя (8)
Кібакова Надія Олександрівна (8)
Федина Наталья (8)
Рябова Александра (8)
Литвиненко Инна (8)
Бебик Владислав (8)
Киреев Иван (8)
Ворохта Алиса (7)
Дроздин Владимир (7)
Димитриев Александр (7)
Носуленко Марк (7)
Курьянов Павел (7)
Чернецкий Андрей Святозар (7)
Мартынюк Георгий (7)
Холодков Юрий (7)
Чежеумова Анна (7)
Нарусевич Никита Мирославович (7)
Василевский Иван (7)
Савчак Данила (7)
Мога Александр (7)
Шеванов Владислав (6)
Данилов Андрей (6)
Дьяченко Александр (6)
Ларикова Валерия (6)
Ивасенко Настя (6)
Миловская Карина (6)
Бутник Михаил (6)
Метри Николь (6)
Пасенченко Томас (6)
Крутоголов Даниил (6)
Сытников Дан (6)
Неделева Анна (6)
Подгорный Богдан (5)
Пушкин Никита (5)
Козиний Николай (5)
Зиновьев Андрей (5)
Жуков Павел (5)
Боурош Юлиана (5)
Черноморец Илья (5)
Даниленко Дария (5)
Гук Алина (5)
Щебетовський Дмитро Геннадійович (5)
Демиденко Кирилл (5)
Колчинская Яна (5)
Мясоедов Иван (5)
Севастьянова Лиза (5)
Танащук Григорій Русланович (4)
Дуков Иван (4)
Семерня Никита (4)
Рудницкий Евгений (4)
Шпилевский Никита (4)
Юрковская Яна (4)
Бондаренко Кирилл (4)
Калинин Дмитрий (4)
Марокко Алла (4)
Иванов Виктор (4)
Волынец Александр (4)
Найденова Дарья (3)
Ливитчук Максим (3)
Аль-Омари Амир (3)
Гусак Дмитро Євгенович (3)
Саркисян Роман (3)
Мозгунов Даниил (3)
Довгань Александр (3)
Джашимов Антон (3)
Жук Світлана (2)
Юдин Даниил (2)
Кадзевич Даниил (2)
Павлов Богдан (2)
Чачко Натан (2)
Бригарь Лена (2)
Веранян Герман (2)
Мацалышенко Паша (2)
Евчук Максим (2)
Федяєва Євгенія (2)
Филистович Александра (2)
Чернобровкин Артем (2)
Лозинский Дмитрий (2)
Євчук Даяна (2)
Константинов Євген (2)
Ткачева Таисия (2)
Воротов Дмитрий (2)
Мырза Дмитрий (2)
Романова Таня (1)
Дарієнко Дмитро (1)
Питон Пайтон (1)
Шихова Елена (1)
Філіпенко Микита (1)
Вергелес Владислав (1)
Вдовиченко Оля (1)
Михайліщук Валентина (1)
Кулык Даниил (1)
Иванов Александр (1)
Лисовец Митя (1)
Диденко Богдан (1)
Калаус Александр (1)
Куліш Марія (1)
Макогон Владимир Сакович (1)
Наумова Лена (1)
Алексеев Максим (1)
Лукьянова Маша (1)
Куніцина Діана (1)
Будіш Михайло (1)
Кулік Віталій (1)
Пересичный Никита (1)

Разложение числа на простые множители онлайн

Данный онлайн калькулятор производит разложение чисел на простые множители методом перебора простых делителей. Если число большое, то для удобства представления пользуйтесь разделителем разрядов.

 Результат уже получен!

Разложение числа на простые множители − теория, алгоритм, примеры и решения

Один из простейших способов разложить число на простые множители − это проверить, делится ли данное число на 2, 3, 5 ,… и т.д., т.е. проверить, делится ли число на ряд простых чисел. Если число n не делится ни на какое простое число до , то даннаое число является простым, т.к. если число составное, то имеет по крайней мере два множителя и оба они не могут быть больше .

Представим алгоритм разложения числа n на простые множители. Подготовим заранее таблицу простых чисел до s=. Обозначим ряд простых чисел через p1, p2, p3, …

Алгоритм разложения числа на простые делители:

  1. Исходный данные n, i=0, s=.
  2. Увеличить i: i=i+1.
  3. Если pi>s, то сохранить значение n и перейти к шагу 8.
  4. n делить на pi.
  5. Если n делится на pi, то сохранить значение pi. Вычислить k=n/pi. Брать в качестве n число k: n=k.
  6. Если n не делится на pi, то перейти к шагу 2.
  7. Если n≠1, перейти к шагу 4.
  8. Остановить процедуру.

Пример 1. Разложить число 153 на простые множители.

Решение. Нам достаточно иметь таблицу простых чисел до , т.е. 2, 3, 5, 7, 11.

Делим 153 на 2. 153 не делится на 2 без остатка. Далее делим 153 на следующий элемент таблицы простых чисел, т.е. на 3. 153:3=51. Заполняем таблицу:

Теперь проверяем, делится ли число 51 на 3. 51:3=17. Заполняем таблицу:

Далее проверяем, делится ли число 17 на 3. Число 17 не делится на 3. Оно не делится и на числа 5, 7, 11. Следующий делитель больше . Следовательно 17 простое число, которое делится только на себя: 17:17=1. Процедура остановлена. заполняем таблицу:

Выбираем те делители, на которых числа 153, 51, 17 делились без остатка, т.е. все числа с правой стороны таблицы. Это делители 3, 3, 17. Теперь число 153 можно представить в виде произведения простых чисел: 153=3·3·17.

Пример 2. Разложить число 137 на простые множители.

Решение. Вычисляем . Значит нам нужно проверить делимость числа 137 на простые числа до 11: 2,3,5,7,11. Поочередно делив число 137 на эти числа выясняем, что число 137 не делится ни на одно из чисел 2,3,5,7,11. Следовательно 137 простое число.

Разложение числа на множители

Главная »
Простые числа, факторизация » Разложение числа на множители
Разложение числа на множители,
Нахождение НОД,
Нахождение НОК,
Таблица простых чисел,
Признак делимости на 2,
Признак делимости на 3,
Признак делимости на 4,
Признак делимости на 5,
Признак делимости на 6,
Признак делимости на 9,
Признак делимости на 10,
Признак делимости на 12

Простые и составные числа. Разложение числа на множители

Натуральные числа – это числа, которые используются при счете предметов (1, 2, 3, 4, 5 и т.д.). Иными словами, натуральные числа – это целые положительные числа.

Натуральные числа бывают простыми и составными.

Простые числа – это числа, которые делятся нацело только на себя и на 1. Все остальные числа, кроме простых называются составными.

Например, числа 3, 5, 19 – это простые числа. Они нацело делятся только сами на себя и на 1, ни на что другое они не делятся. В то же время 9 – составное число: оно делится не только само на себя и на 1, но еще и на 3.

Любое составное число можно представить в виде произведения двух или более простых множителей. Например, 35 = 7 * 5, 100 = 2*2*5*5, 9 = 3*3. Процесс представления составного числа в виде произведения простых множителей и называется разложением числа на множители.

Для того, чтобы разлагать числа на множители, нам потребуется таблица простых чисел.

Алгоритм разложения числа на множители

  1. Последовательно перебирая простые числа в таблице, найти самое маленькое (минимальное) простое число, на которое делится разлагаемое число.

  2. Записать это простое число, затем разделить разлагаемое число на простое.

  3. Приняв результат за разлагаемое число, повторить пп. 1 и 2, пока не дойдем в результате до 1.

 
Пример разложения числа на множители

Чтобы просмотреть пример разложения числа на множители, просто введите в поле ввода любое число (например, 1500), и нажмите кнопку «Разложить и объяснить».

См. также:
Дискриминант квадратного уравнения
Решение квадратных и биквадратных уравнений

Факторизация числа в Python на простые множители и почему мы проверяем квадратный корень числа | Рохан Пол

Чтобы понять приведенное выше первое замечание, эти две математические гипотезы о простом факторизации любого числа

1-е утверждение

Если n не является простым числом, ПО-МИНИМУМУ один простой множитель будет меньше √n

Доказательство:

Предположим, что n — положительное целое число, такое что n = pq, где p и q — простые числа.Предположим, что p> sqrt (n) и q> sqrt (n). Умножая эти неравенства, мы получаем p * q> sqrt (n) * sqrt (n)>, что означает p * q> n. Это противоречит нашей гипотезе n = pq. Следовательно, мы можем заключить, что либо

 p <= sqrt (n}, либо q <= sqrt (n) 

И вторая гипотеза

Если n не является простым числом - может быть СОВЕРШЕННО 1 простой множитель из n больше, чем sqrt (n).

Доказательство:

Если возможно, пусть существует два больших sqrt (n), тогда их произведение также должно делить n, но оно будет больше n, что противоречит нашему предположению.Таким образом, не может быть более одного простого множителя n, большего, чем sqrt (n).

И вышесказанное так важно для простой факторизации числа - Итак, в моем приведенном выше коде, когда я хочу получить все простые множители n, мне нужно не более чем проверить Primality до sqrt (n). И после проверки до sqrt (n) - число, оставшееся после деления n на все возможные степени простых чисел, меньших sqrt (n), является ЛИБО простым числом или 1.

Примечание. primes » в приведенном выше коде с нижней частью внутри первого цикла while -

, а число% prime_num == 0: 
prime_factors.append (int (prime_num))
number / = prime_num

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

Итак, вторая часть моего алгоритма должна фиксировать оставшееся число, чтобы оно было больше, чем sqrt (n) Prime factor, ТОЛЬКО если это оставшееся число> 1. И если оставшееся число = 1, просто игнорируйте его.

Сначала суть кода

Алгоритм / шаги

1> Я начинаю делитель с наименьшего простого числа, равного 2.Разделите на 2 столько раз, сколько смогу, пока я не перестану делить на 2. (И во время этого процесса запишите, сколько раз я могу успешно разделить.)

Далее, застенчивый, я делю или корректирую исходное число в указанное выше число

 / = простое_число 

Скажем, если я не делю - простые множители с кратностью больше 1 приведут к тому, что больший множитель будет непростым. Я не хочу рассматривать около 2 * n или 3 * n , потому что я уже проверил и зафиксировал в своем списке prime_factor для 2 и 3

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

2> Итак, с каждым последующим циклом while я делю число на последовательно увеличивающиеся простые числа, пока не найду тот, который является множителем числа.

То есть после первого деления на 2 (при условии, что я нашел, что 2 является множителем исходного числа), возьмите результат из (1), то есть скорректированное число после деления на 2, и разделите на 3 столько раз, сколько I. может.

Затем перейдите к следующему простому числу, 5. Возьмите результат из (2) и разделите на 5 столько раз, сколько смогу.

И во время этого последовательного деления, как только я найду множитель или делитель p, я могу заменить n на m = n / p и продолжить процесс пробного деления с простыми числами, большими или равными p, до (n / p) ¹ / 2

Повторяйте процесс, пока окончательный результат не будет равен 1.

Теперь самая важная часть для улучшения временной сложности алгоритма - которая следует из принципа -

При простой факторизации n цикл идет до квадратного корня из n, а не до n.

3> Однако нам не нужно заходить так далеко, т.е. до самого числа. Если мы проверили все простые числа до квадратного корня из нашего целевого числа, не найдя делителя, нам не нужно идти дальше, потому что мы знаем, что наше целевое число все-таки простое.

Это потому, что - если число N имеет простой множитель больше, чем √n, то оно обязательно имеет простой множитель меньше, чем √n

Таким образом, достаточно искать простые множители в диапазоне [1, sqrt (n )], а затем использовать их для вычисления простых множителей в диапазоне [sqrt (n), n].

Мы реализуем описанное выше следующим образом -

A. Мы знаем, что простые множители с кратностью> 1 приведут к тому, что больший множитель будет непростым. Чтобы решить эту проблему, продолжайте делить больший коэффициент пары на меньший, пока он не перестанет делиться.

B. В качестве примера: для 28 множители равны 2,2,7, здесь 7 больше, чем sqroot (28), но нет единственного простого числа, которое можно объединить в 28 (т.е. x * 7 = 28, где x - простое число, этого не существует, поскольку x равно 4, что не является простым числом), поэтому деление простых чисел от начала на 2 кратного времени поможет, 28/2 = 14, 14/2 = 7, тогда мы знаем 2 & 2 - простые множители, также возьмите оставшийся 7 - это еще одно простое число, завершающее список простых множителей.

Если в диапазоне [1, sqrt (n)] нет простых множителей, то само «n» является простым и нет необходимости продолжать поиск за пределами этого диапазона.

Чтобы объяснить это немного подробнее. Если вы не найдете множитель меньше sqrt (n), то само число «n» является простым числом. Поскольку, учитывая обратное, вы обнаружите, что два фактора больше, чем sqrt (n), например «a» и «b». Но тогда a * b> sqrt (n) * sqrt (n) делает их произведение больше, чем само число, что невозможно.

Следовательно, если есть множитель, больший, чем sqrt (n), должен также существовать множитель, меньший, чем sqrt (n), иначе их произведение превысит значение «n».

Но в этом случае он сделает переменную 'prime_num' НЕ-ПЕРВОЙ - потому что теперь ее можно выразить как (a * b), что возможно только для НЕ-простого числа, поскольку простое число может быть выражено только как 1 * сам.

Но здесь нас интересует ТОЛЬКО поиск простых факторов, поэтому мы будем игнорировать все НЕПЕРВИЧНЫЕ ФАКТОРЫ.

Следовательно, в приведенном выше алгоритме проверка всех возможных простых чисел до math.sqrt (number) достаточно

Целочисленное разложение - Academic Kids

От академических детей

В математике проблема целочисленного разложения на простые множители (также известного как разложение на простые числа ) заключается в следующем: для заданного положительного целого числа запишите его как произведение простых чисел.Например, для числа 45 факторизация на простые множители будет 3 2 5. Факторизация всегда уникальна, согласно фундаментальной теореме арифметики. Эта проблема важна для математики, криптографии, теории сложности и квантовых вычислений.

Разложение на простые числа

Полный список множителей может быть получен путем разложения на простые множители путем увеличения экспоненты от нуля до достижения числа. Например, поскольку 45 = 3 2 5 1 , 45 делится на 3 0 5 0 , 3 0 5 1 , 3 1 5 0 , 3 1 5 1 , 3 2 5 0 и 3 2 5 1 или 1, 5, 3, 15, 9 и 45.Напротив, факторизация на простые множители включает только простые множители. См. Алгоритм простой факторизации.

Практическое применение

Учитывая два больших простых числа, их легко перемножить. Однако, учитывая их продукт, трудно найти факторы. Это актуально для многих современных систем криптографии. Если бы был найден быстрый метод решения проблемы целочисленной факторизации, то несколько важных криптографических систем были бы взломаны, включая алгоритм открытого ключа RSA и генератор псевдослучайных чисел Блюма Блюма Шуба.

Хотя быстрый факторинг - это один из способов сломать эти системы, может быть других способов сломать их, которые не включают факторинг. Так что возможно, что проблема целочисленной факторизации действительно сложна, но эти системы все же можно быстро сломать. Редкое исключение - генератор Blum Blum Shub. Было доказано, что это так же сложно, как и целочисленная факторизация: если вы можете сломать генератор за полиномиальное время, вы можете факторизовать целые числа за полиномиальное время, и наоборот.

Современное состояние

По состоянию на 2005 год, наибольшее полупростое число, факторизованное с использованием универсальных методов в рамках публичных исследований, - это RSA-200, длина которого составляет 663 бита.

Если большое, n -битное число является произведением двух простых чисел примерно одинакового размера, то неизвестен алгоритм, который может множить полиномиальное время. Это означает, что не существует известного алгоритма, который мог бы разложить его на множители во времени O ( n k ) для любой константы k .{\ frac {2} {3}} \ right) \ right).
<математика>

Для обычного компьютера GNFS - самый известный алгоритм для больших n . Однако для квантового компьютера Питер Шор в 1994 году открыл алгоритм, решающий его за полиномиальное время. Это будет иметь серьезные последствия для криптографии, если когда-либо будет построен большой квантовый компьютер. Алгоритм Шора занимает только время O ( n 3 ) и пространство O ( n ). Известны формы алгоритма, использующие всего около 2 n кубитов.В 2001 году первый 7-кубитный квантовый компьютер стал первым, на котором был запущен алгоритм Шора. В нем учтено число 15.

Сложность и сложность

Неизвестно, какие именно классы сложности содержат проблему целочисленной факторизации. Форма проблемы решения («имеет ли N коэффициент меньше M ?»), Как известно, присутствует как в NP, так и в co-NP. Это потому, что ответы ДА и НЕТ могут быть проверены, если даны простые множители вместе с их доказательствами простоты.Известно, что он входит в BQP из-за алгоритма Шора. Предполагается, что он находится вне всех трех классов сложности P, NP-Complete и co-NP-Complete. Если бы можно было доказать, что он находится либо в NP-Complete, либо в co-NP-Complete, это означало бы NP = co-NP. Это был бы очень неожиданный результат, поэтому многие подозревают, что целочисленная факторизация находится за пределами обоих этих классов. Многие люди пытались найти для него алгоритмы с полиномиальным временем и потерпели неудачу, поэтому многие подозревают, что он находится за пределами P.

Интересно, что проблема решения "является ли N составным числом?" (или эквивалентно: « N - простое число?») оказывается намного проще, чем проблема фактического нахождения множителей N . В частности, первое может быть решено за полиномиальное время (в количестве n цифр N ), согласно недавнему препринту, приведенному в ссылках ниже. Кроме того, существует ряд вероятностных алгоритмов, которые могут очень быстро проверить простоту, если кто-то согласен принять небольшую вероятность ошибки.Простота проверки простоты является важной частью алгоритма RSA, поскольку для начала необходимо найти большие простые числа.

Алгоритмы факторинга

Специальное

Время выполнения специального алгоритма факторинга зависит от свойств его неизвестных факторов: размера, особой формы и т. Д. Точное время выполнения зависит от алгоритма.

Универсальный

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

Другие известные алгоритмы

Внешние ссылки

  • Ричард П. Брент, "Недавний прогресс и перспективы алгоритмов целочисленной факторизации", Computing and Combinatorics ", 2000, pp.3-22. Download ( http://citeseer.nj.nec.com/327036. html )
  • Manindra Agarwal, Nitin Saxena, Neeraj Kayal, "PRIMES is in P", Preprint, 6 августа 2002 г., http: // www.cse.iitk.ac.in/news/primality.html
  • FAQ "PRIMES is in P" http://crypto.cs.mcgill.ca/~stiglic/PRIMES_P_FAQ.html
  • ftp://ftp.computing.dcu.ie/pub/crypto/factor.exe - это общедоступная программа целочисленной факторизации для Windows. Он утверждает, что обрабатывает 80-значные числа. См. Также веб-сайт MIRACL ( http://indigo.ie/~mscott/ )
  • http://www.alpertron.com.ar/ECM.HTM - это Java-апплет с целочисленной факторизацией, который использует метод эллиптической кривой и самоинициализирующееся квадратичное сито.* \ in P \ newline \ tiny \ text {* могут применяться условия} \]
    В последнее время я проходил курс под названием CSC373: Разработка, анализ и сложность алгоритмов . В нем представлены общие методы программирования, такие как жадные алгоритмы, динамическое программирование и линейное программирование, которые повсеместно используются во многих современных приложениях для решения проблем. По мере того, как курс подходит к концу, мы изучаем проблемы сложности \ (\ small NP \) и \ (\ small P \), а также то, как доказывать \ (\ small NP \) - полноту алгоритмов.

    Чтобы понять сложность \ (\ small P \) и \ (\ small NP \) простыми словами, ответ на проблему сложности \ (\ small P \) может быть получен быстро в зависимости от размера входных данных. , в то время как ответ на проблему сложности \ (\ small NP \) может быть проверен быстро . В более строгих терминах \ (\ small P \) - это набор всех задач решения, которые могут быть решены за полиномиальное время на детерминированной машине Тьюринга , а \ (\ small NP \) - это набор, который может быть решен в полиномиальное время на недетерминированной машине Тьюринга .Все компьютеры, которые мы используем в настоящее время, являются детерминированными машинами Тьюринга, поэтому задачи, находящиеся в \ (\ small NP \), не имеют гарантированного решения за полиномиальное время , а не .

    Типичным примером проблемы \ (\ small NP \) является проблема \ (\ small \ text {SUBSET-SUM} \). То есть, учитывая список положительных целых чисел, можете ли вы выбрать их подмножество, которое в сумме дает другое положительное целое число \ (\ small k \)?

    Решение этой проблемы можно легко проверить: проверьте, все ли числа в решении находятся в списке, а затем сложите их, чтобы увидеть, суммируются ли они в \ (\ small k \).Однако по прошествии многих десятилетий нам еще предстоит найти решение проблемы \ (\ small \ text {SUBSET-SUM} \) с полиномиальной временной сложностью, т.е. доказать, что эта проблема решения находится в \ (\ small P \ ).

    Другой пример проблемы \ (\ small NP \) - проблема простой факторизации. Если вам дано положительное целое число \ (\ small n \), определите все его простые множители. Чтобы понять это в контексте \ (\ small P \) и \ (\ small NP \), мы должны переформулировать это в проблему решения, т.е.е. вопрос типа "да-нет". Мы определяем альтернативную задачу \ (\ small \ text {FACTORS} \), которая определяет для положительных целых чисел \ (\ small n \) и \ (\ small k \), имеет ли \ (\ small n \) простое число множитель меньше чем \ (\ small k \)? Мы можем решить исходную проблему, используя эту новую задачу решения вместе со следующим алгоритмом:

    • Первый шаг: выполните двоичный поиск с разными значениями \ (\ small j \ leq k \) и найдите границу, где \ (\ small (n, j) \) ложно и \ (\ small (n, j + 1) \) верно.Эта граница, а именно \ (\ small j + 1 \), гарантированно будет простым множителем \ (\ small n \).
    • Второй шаг: Пусть \ (\ small n_1 = \ frac {n} {j + 1} \), затем повторите алгоритм, используя вход \ (\ small (n_1, k) \).

    Этот алгоритм продолжает уменьшать значение \ (\ small n \) до \ (\ small n = 1 \), что указывает на то, что мы получили все возможные множители и, следовательно, простые множители \ (\ small n \). Этот поиск занимает до \ (\ small O (\ log {n} \ cdot \ log {n}) \) итераций, прежде чем будут найдены все простые множители.Если \ (\ small \ text {FACTORS} \) находится в \ (\ small P \), то мы построили алгоритм простой факторизации, который работает за полиномиальное время. Однако, цитируя Википедию, «не было опубликовано ни одного алгоритма, который мог бы разложить все целые числа на множители за полиномиальное время». Таким образом, похоже, что \ (\ small \ text {FACTORS} \) не находится в \ (\ small P \) ...

    Но верна ли Википедия? «Да, но на самом деле нет», и что конкретно означает Википедия, так это то, что в сильно полиномиальное время не было опубликовано ни одного алгоритма.Оказывается, большинство специалистов по информатике рассчитывают временную сложность ввода в виде количества требуемых битов (почему здесь объясняется). Например, число \ (\ small 12 \) будет интерпретироваться как \ (\ small 1010 \), что требует \ (\ small 4 \) бит, поэтому \ (\ small 12 \ mapsto 4 \). Однако некоторые могут первоначально думать о простых числах с точки зрения размера самого числа, то есть \ (\ small 12 \ mapsto 12 \). Если алгоритм имеет полиномиальное время выполнения по отношению к этому определению размера ввода, он называется слабо -полиномиальным временем.Обычно это актуально только при рассмотрении целых чисел (в отличие от графиков, наборов, элементов и т. Д.).

    Так как же показать, что простая факторизация происходит за полиномиальное время? Во-первых, мы могли бы рассмотреть определение класса временной сложности \ (\ small P \), чтобы включить слабо-полиномиальные алгоритмы сверху, но это не очень хорошо принято. На самом деле, это различие осуществляется с помощью другого класса, называемого псевдополиномиальным временем. Еще лучше, если мы переопределим проблему принятия решения как определение простых множителей для унарного представления \ (\ small n \), i.е. \ (\ small 3 \ mapsto 111, 5 \ mapsto 11111 \), что заставляет размер ввода равняться самому фактическому числу. Это (пере) определение позволяет нам строго требовать полиномиального времени!

    Вот код, который может реализовать \ (\ small \ text {FACTORS} \) в \ (\ small P \) для унарного представления \ (\ small n \):

      # Наивный алгоритм решения проблемы ФАКТОРЫ
    факторы def (n: int, k: int) -> bool:
        для i в диапазоне (2, k + 1):
            # Если остаток равен 0
            если n% i == 0:
                вернуть True
        # Больше нет возможных факторов
        вернуть ложь
      

    В заключение, простая факторизация может выполняться за полиномиальное время!

    % PDF-1.5
    %
    1 0 объект
    >>>] / Order [] / RBGroups [] >> / OCGs [61 0 R] >> / PageLayout / OneColumn / PageMode / UseNone / Pages 2 0 R / Type / Catalog >>
    эндобдж
    59 0 объект
    > / Шрифт >>> / Поля 65 0 R >>
    эндобдж
    60 0 объект
    > поток
    2016-02-11T11: 37: 34 + 08: 002016-03-10T17: 02: 27 + 01: 002016-03-10T17: 02: 27 + 01: 00doPDF Ver 7.2 Build 355 (Windows XP Professional Edition (SP 3) - Версия: 5.1.2600 (x86)) application / pdfuuid: 776d14c7-1a07-4bc4-9ab1-ac0edc3d887cuuid: feabd777-107a-4d44-a1c4-1725c5936ec9

    конечный поток
    эндобдж
    2 0 obj
    >
    эндобдж
    3 0 obj
    > / Font> / ProcSet [/ PDF / Text] / XObject >>> / Type / Page >>
    эндобдж
    27 0 объект
    > / Font> / ProcSet [/ PDF / Text] / XObject >>> / Type / Page >>
    эндобдж
    29 0 объект
    > / Font> / ProcSet [/ PDF / Text / ImageC] / XObject >>> / Type / Page >>
    эндобдж
    38 0 объект
    > / Font> / ProcSet [/ PDF / Text] / XObject >>> / Type / Page >>
    эндобдж
    176 0 объект
    > поток
    HWɊ $ Wy] 4 tt t? | Ŗn53bhp3V / y ؿ 7 oq ~ 4o.qFR7_RjPp8px; vjL38% / dPb [0 ([8j @ i5'7iZXH =

    основных факторов и псевдополиномиальное время

    Большинство программистов хотя бы мимолетно знакомы с нотацией большого О. Это метод, который используется для определения верхней границы требований к времени и пространству выполнения алгоритмов по мере увеличения входных данных.

    Рассмотрим типичный пример сортировки списка: разные алгоритмы будут вести себя по-разному по мере увеличения количества элементов для сортировки. Очень простой алгоритм может перебирать список в поисках наименьшего элемента, который выводится в начало списка.Затем он повторяет тот же процесс для оставшейся части списка. В этом случае мы сначала просматриваем список из N элементов N раз, чтобы найти наименьший элемент, затем N-1 раз, N-2 раз и так далее. Это означает, что мы должны выполнить N × (N + 1) / 2 сравнений. Таким образом, такой алгоритм находится в O (N 2 ) или в полиноме (точнее, квадратичном) по отношению к количеству необходимых сравнений. По большому счету, это считается не так уж и плохо. Однако есть лучшие алгоритмы, которые могут сортировать элементы за время O (N × log N).

    В общих чертах сложность задач можно разбить на 3 большие категории:

    1. Если они находятся в O (1), O (log N), O (sqrt N), O (N) или O (N × log N), алгоритмы обычно считаются достаточно легко управляемыми , что является необычным так сказать они управляемы .

    2. Алгоритмы, которые имеют полиномиальную сложность не ниже степени 2, такие как O (N 2 ), O (N 3 ) и т. Д., Являются более дорогостоящими для решения по мере увеличения входных данных.Такая степень сложности не идеальна, но часто бывает приемлемой для многих видов реальных проблем, если показатель степени невелик.

    3. Для алгоритмов

      O (2 N ) требуется экспоненциальных ресурсов . Это означает, что нам нужно удваивать ресурсы для небольшого увеличения размера ввода. Алгоритмы, которые являются экспоненциальными или хуже (например, факториальными), обычно считаются трудноразрешимыми . Скачок в вычислительных требованиях происходит очень быстро, поэтому могут быть решены только небольшие экземпляры таких проблем, даже с большой вычислительной мощностью.

    Иногда люди говорят, что большой O - это показатель наихудшего случая производительности . Однако в терминологии есть нюанс. Big-O измеряет верхнюю границу производительности по сравнению с входными данными. Тем не менее, алгоритм может иметь разное значение «большой О» для разных типов входных данных. Обычно рассматриваются лучший случай , худший вариант и средний случай . Например, известно, что quicksort имеет наихудший случай O (N 2 ), но обычно это O (N × log N).

    В этой статье я хотел бы исследовать кое-что, что может быть непростым, а именно то, что большой O измеряется относительно длины входного сигнала . Это означает, что big-O может фактически отличаться для одного и того же алгоритма, в зависимости от того, как мы представляем ввод! Это может показаться запутанным, поэтому давайте рассмотрим конкретный пример.

    Факторинг целых чисел

    Разложение целых чисел на простые числа - классическая проблема информатики. Некоторые широко используемые криптографические алгоритмы, такие как RSA, полагаются на то, что это сложная проблема, которую трудно решить, поскольку числа становятся больше. Классические алгоритмы для разложения целых чисел требуют экспоненциального времени в худшем случае.

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

    Давайте рассмотрим наиболее интуитивно понятный и простой алгоритм получения простых множителей числа.Предположим, у нас есть целое число, скажем 124. Как мы можем разложить его на простые числа? Мы можем начать с проверки, можно ли разделить число на 2:

    .

    124/2 = 62

    Результат четный, поэтому давайте еще раз разделим на 2:

    62/2 = 31

    Отсюда мы можем попробовать разделить на 3, 4, 5 и т. Д. ... вплоть до 30, но все эти делители оставят остаток. Это означает, что 31 тоже простое число. Оно может быть разделено только на себя или на 1. Таким образом, простые множители 124 равны 2 × 2 × 31.

    Проверяйте только множители до квадратного корня

    Мы можем значительно оптимизировать этот алгоритм: вместо того, чтобы проверять все возможные множители вплоть до самого нашего числа N, нам нужно проверять только числа, которые меньше или равны квадратному корню из N: скажем, sqrt N = S. По определению S × S = N. Скажем, у нас есть целое число T, которое больше S, но меньше N, и T является множителем N. Это означает, что N / T = U, где U также является множителем. Поскольку T больше S, U должно быть меньше S (иначе T x U было бы больше N).Поскольку U меньше S, мы бы попробовали его как множитель, прежде чем достичь S. Частное N / U равно T. Следовательно, мы уже встречали T до достижения S.

    Чтобы найти все простые множители N, это означает, что все, что нам нужно сделать, это попробовать все возможные множители от 2 до квадратного корня из N включительно. Ниже представлена ​​простая реализация этого алгоритма на Python:

      def prime_factors (n):
        результаты = []
    
        коэффициент = 2
        а коэффициент * коэффициент <= n:
            (n, промежуточные_результаты) = проверочный_фактор (n, коэффициент)
            результаты + = промежуточные_результаты
            коэффициент + = 1
    
        если (n> 1):
            результаты + = [n]
    
        вернуть результаты
    
    def check_factor (n, коэффициент):
        результаты = []
    
        (q, r) = divmod (n, коэффициент)
        в то время как r == 0:
            полученные результаты.добавить (фактор)
            п = д
            (q, r) = divmod (n, коэффициент)
    
        вернуть n, результаты
      

    Мы можем дополнительно сократить время работы этого алгоритма вдвое, пропустив четные числа больше 2, поскольку любые четные множители будут извлечены путем проверки деления на 2. Хотя это может быть значительным на практике, это принципиально не изменит сложность с точки зрения big-O. Big-O, как правило, представляет собой крупнозернистый инструмент, который ищет всеобъемлющую модель роста.Постоянные факторы и члены более низкого порядка обычно игнорируются.

    Худший случай

    Когда мы множим число N, сколько делений нам нужно выполнить при увеличении N? Наихудший случай для нашего алгоритма - когда N простое: нашему алгоритму придется (безуспешно) попробовать все числа от 2 до квадратного корня из N. Следовательно, наш алгоритм находится в O (Sqrt N) для наихудшего случая. Допустим, мы пытаемся разложить на множители простое число 1000003. Нам нужно будет проверить каждое из чисел от 2 до 1000, поэтому мы выполним (Sqrt N) - 1 деления.

    Входная длина в зависимости от величины

    На первый взгляд, этот алгоритм кажется сублинейным. Однако есть ключевой момент, который легко упустить. Число битов, необходимых для кодирования N, равно log 2 N. Это означает, что количество делений составляет экспоненциально по сравнению с длиной ввода в битах , даже если оно сублинейно, когда мы сравниваем количество делений. к N как величина. Если бы наш алгоритм был в O (N), то он был бы в O (2 b ), где b - количество битов в N.Однако здесь он находится в O (sqrt N). Поскольку для sqrt N требуется половина битов в N, наш алгоритм оказывается в O (2 b / 2 ).

    На графике ниже показано количество делений по сравнению с количеством битов в N для наихудшего сценария:

    Вместо использования десятичного или двоичного представления мы могли бы кодировать число , используя унарное представление, где 1 = 1, 2 = 11, 3 = 111 и т. Д. В этом случае наш алгоритм действительно был бы в O (sqrt N) .Однако мы бы использовали гораздо больше, экспоненциально больше памяти для хранения наших чисел, чем необходимо. В двоичном формате 1000003 требует всего 20 бит (11110100001001000011). В унарном языке требуется миллион и 3 цифры! В десятичном формате 1000003 требует 7 цифр, что даже меньше, чем 20 цифр в двоичном формате. Однако оба значения пропорциональны логарифму числа, поэтому такая разница обычно не очень важна для большого О. Например, чтобы преобразовать логарифм по основанию 2 в основание 10, мы используем уравнение log 10 N = log 2 N / log 2 10 ≈ 1/3.32 × log 2 N. Они прямо пропорциональны друг другу.

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

    Алгоритм с псевдополиномиальным временем покажет «экспоненциальное поведение» только при столкновении с экземплярами, содержащими «экспоненциально большие» числа, что может быть редкостью для интересующих нас приложений. В таком случае алгоритм этого типа может служить нашим целям. почти так же, как алгоритм с полиномиальным временем. - Компьютеры и неподатливость, Майкл Р. Гэри и Дэвид С. Джонсон

    Типичный случай

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

    Но это явно намного лучше, чем наихудший случай. Ниже приведен график наихудшего случая по сравнению с этой приблизительной оценкой типичного случая. Я сгенерировал случайные числа в диапазоне 2 b-1 <= N <2 b , где количество битов b изменилось с 3 до 48. Для каждой длины битов я разложил на множители 10 000 случайно сгенерированных чисел. Мы видим, что количество делений намного меньше для случайных чисел по сравнению с простыми числами:

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

    Эти результаты на самом деле очень близки к тому, что мы ожидали бы, если бы использовали пробное деление с уже существующим списком основных факторов. В этом случае вместо O (2 b / 2 ) мы имеем O (2 b / 2 / b × 2 / ln 2). Это говорит о том, что когда мы выбираем числа наугад, в большинстве случаев нам просто нужно проверить список относительно небольших простых чисел.

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

    Ниже показано соотношение фактически проверяемых факторов по сравнению с sqrt N. Для 3-битных чисел, то есть 100 (4), 101 (5), 110 (6) и 111 (7), существует только единственный фактор, который нужно проверить, 2. Поскольку мы всегда проверяем этот единственный фактор, коэффициент равен 1 или 100%. По мере того, как мы получаем все большие и большие числа, доля факторов-кандидатов, которые мы должны проверять, резко снижается и стремится к нулю по мере того, как количество битов стремится к бесконечности:

    Лучший чехол

    В лучшем случае входом является степень двойки, поэтому все, что нужно, - это продолжать деление на 2.С точки зрения числа N это означает, что нам нужно только записать 2 N делений. Наш алгоритм будет в O (log N) по отношению к величине N и в O (b) по отношению к количеству битов, b, в N. Хотя в худшем случае сценарий является экспоненциальным, в лучшем случае сценарий линейный.

    Деление не является постоянным

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

    Однако для очень больших чисел это не работает. Если мы разделим два (огромных) числа с помощью простого метода, такого как деление в столбик, это превратится в операцию O (b 2 ), где b - количество бит в числах. Я считаю, что, используя более продвинутые методы, это можно улучшить, но он останется хуже, чем O (b × log b).Однако, поскольку наш алгоритм разложения на простые множители является экспоненциальным, этот дополнительный множитель, вероятно, слишком мал, чтобы кардинально изменить картину. Экспоненциальный член будет иметь тенденцию преобладать над любым дополнительным полиномиальным множителем.

    Заключение

    Даже несмотря на то, что существуют лучшие алгоритмы для получения простых множителей очень больших чисел, оказывается, что все они в общем случае в основном экспоненциальны. Без квантовых компьютеров невозможно эффективно разложить числа на множители.Криптография RSA использует эту идею: RSA генерирует два очень больших простых числа (каждое из которых составляет бит, ), а затем умножает их. Он полагается на невозможность найти два основных фактора этого огромного конечного продукта.

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

    Алгоритм динамического программирования для задачи о ранце - еще один пример алгоритма псевдополиномиального времени.

    Знакомство с Big-O

    Если вы раньше не сталкивались с идеей большого О, вот две популярные статьи на сайте dev.to, в которых представлены концепции большого О и сложности:

    Список литературы

    Алгоритм разложения на простые множители

    python

    Идею алгоритма я получил на этом сайте. Реализация алгоритма факторизации Ферма. Это модуль и утилита командной строки для разложения целых чисел. Алгоритм ро Полларда - это алгоритм целочисленной факторизации.Он был изобретен Джоном Поллардом в 1975 году. Например, 6 = 2 × 3 и 12 = 2x2x3. Поскольку 15 не является простым числом, оно будет иметь множители меньше 15, а именно 3 и 5.) Далее, застенчивый, я делю или корректирую начальное число в приведенном выше примере, скажем, если я не делю - простые множители с большим кратность, чем 1, приведет к тому, что больший множитель будет непростым. Ниже приведен простой алгоритм №1) Когда вы найдете простой множитель, разделите его на n (smallest_prime_factor). Пытаться вычесть 15 - это то же самое, что сразу вычленить 3 и 5.Алгоритм Ро Полларда для простой факторизации в java Программирование на Java Java8 Пакет Java.Util Это алгоритм для выполнения факторизации заданных целых чисел. Различные методы поиска простых чисел в C #; Программа Python для проверки простого числа; Программа Python для поиска наибольшего простого множителя числа; Java-методы для проверки простого числа и нахождения следующего простого числа; Программа на Java для определения наибольшего простого делителя числа; Программа для поиска всех простых множителей заданного числа в отсортированном порядке в Python x * 7 = 28, где x - простое число, этого не существует, так как x равно 4, что не является простым числом), поэтому деление простых чисел от начала на 2 кратных время поможет, 28/2 = 14, 14/2 = 7, тогда мы знаем, что 2 и 2 - простые множители, а также оставшееся число 7 - это еще одно простое число, завершающее список простых множителей.В настоящее время большинство лучших современных алгоритмов факторинга основаны на идее, лежащей в основе метода факторизации Ферма. Если мы умножим вместе все простые числа, используемые в этих произведениях, в их наибольшей степени, мы получим наименьшее общее кратное. Если меньшие целые числа являются простыми числами, процесс называется простой факторизацией. Существование первичной факторизации. То есть после первого деления на 2 (при условии, что я обнаружил, что 2 является множителем исходного числа), возьмите результат из (1), т.е. есть несколько требований / фактов: мне нужен быстрый алгоритм простой факторизации, не только для сам, но для использования во многих других алгоритмах, таких как вычисление […] Возьмите результат из (2) и разделите на 5 столько раз, сколько смогу.Этот код является реализацией разложения на простые множители Полларда Ро. Теперь продолжайте обновлять максимальный простой фактор. до самого числа. 25 равно 5 умножить на 5. Метрики. Эта программа на Python позволяет пользователю вводить любое положительное целое число. Алгоритм целочисленной факторизации. Основная идея алгоритма Шора. Простые множители. Найдите наименьшее общее кратное 6, 8, 15. Мы знаем, что простые множители с кратностью> 1 приведут к тому, что больший множитель будет непростым. Что такое первичная факторизация? Основные множители числа.Мы проверяем, делится ли num в точности на любое число от 2 до num - 1. Для числа N выведите все простые множители и их степени. Далее Назад Чтобы получить все простые числа от до n, выполните следующие действия: Составьте список всех чисел от 2 до n. Вопрос о том, может ли этот алгоритм иметь полиномиальное решение, все еще открыт. Этот алгоритм основан на квантовых вычислениях и поэтому называется квантовым алгоритмом. Алгоритм Шора был изобретен Питером Шором для целочисленной факторизации в 1994 году.1 Напишите программу для отображения факторизации на простые множители данного числа в Python ... Этот рецепт использует пробное деление для получения множителей менее 1 миллиона, а затем переключается на алгоритм Брента для получения множителей большего размера. Как мы описали в разделе, выходящем за рамки поиска периода, эквивалентная проблема для факторизации. Теги: primality_testing Создано Мукешем Тивари в пятницу, 14 января 2011 г. (MIT) Python Java Javascript C-Sharp Go C ++ C Ruby Matlab Scala R Kotlin Rust. Алгоритм простой факторизации. Пример. Реализация алгоритма факторизации Ферма.Понятно, что шаг 1 заботится о четных числах. Например, рассмотрим количество пар - (25, 36) (48, 65) (6,25) (3,2) Проверить, является ли данная строка палиндромом в Python. Итак, чтобы решить указанную выше проблему, я продолжаю делить больший коэффициент пары на меньший, пока он не перестанет делиться. Написано. Примеры: Входные данные: 250 Выходные данные: 2 1 5 3 Объяснение: Простые множители 250 - это 2 и 5. Программа на Python для поиска простых множителей числа с помощью цикла For Loop. Этот алгоритм вложен так же, как вы описываете свой; то есть, найдя простое число, возьмите частное и повторите процесс, сохраняя каждое новое простое число по мере его поступления.Основная идея алгоритма Шора. Чтобы получить все простые числа от до n, выполните следующие действия: Составьте список всех чисел от 2 до n. Это одностороннее свойство используется в асимметричной криптосистеме RSA. В следующих разделах мы вводим необходимую теорию криптосистемы RSA и алгоритмы, необходимые для реализации RSA в простой программе Python. Пробное деление В качестве модуля мы предоставляем тест на простоту, несколько функций для извлечения нетривиального множителя целого числа и генератор, который выдает все простые множители числа (с кратностью).Грубый подход: проверяйте все целые числа меньше n, пока не будет найден делитель. Поскольку, рассмотрим обратное, вы обнаружите, что два фактора больше, чем sqrt (n), например «a» и «b». Но здесь нас интересует ТОЛЬКО поиск основных факторов, поэтому мы будем игнорировать все НЕПЕРВИЧНЫЕ ФАКТОРЫ. Вызовы API - 23 Средняя продолжительность вызова - Н / Д. Вопрос или проблема о программировании на Python: я ищу реализацию или понятный алгоритм для получения разложения N на простые множители в Python, псевдокоде или в другом хорошо читаемом тексте.Вот пример нахождения НОК на основе разложения на простые множители: начните с двух разложений на простые множители. Поскольку 15 не является простым делителем, оно будет иметь множители меньше 15, а именно 3 и 5. Поскольку разложение на простые множители может содержать один и тот же простой множитель более одного раза, общая форма разложения на простые множители будет 1 𠑘1 2 ð ‘‘2â € ¦ 𑠘𠑛 ›где 1, â € ¦ - простые числа, а‘ ˜1, â € ¦, 𠑘 - положительные целые числа. Алгоритм простой факторизации, использующий текстовый файл. Живая демонстрация То есть определите два простых множителя \ (p_1 \) и \ (p_2 \), которые удовлетворяют \ (p_1 \ cdot p_2 = N \) для данного большого числа \ (N \) за полиномиальное время.Алгоритм целочисленной факторизации. И мы закончили с нашей простой факторизацией, потому что теперь у нас есть все простые числа. Факторизация простых чисел известна как способ взломать код криптосистемы RSA. Импровизация: проверьте все целые числа меньше √n. Достаточно большое число все равно будет означать много работы. Затем перейдите к следующему простому числу, 5. Это противоречит нашей гипотезе n = pq. primefac версии 1.1. Во-первых, нам нужно найти все простые множители 2. Поскольку я немного новичок в Python, дальнейшие улучшения приветствуются.Также добавлен вариант Brent. 2 появляется один раз в простом разложении числа, а 5 - трижды. Следовательно, если есть множитель больше sqrt (n), должен также существовать множитель меньше sqrt (n), иначе их произведение превысит значение «n». В настоящее время большинство лучших современных алгоритмов факторинга основаны на идее, лежащей в основе метода факторизации Ферма. Факторизация числа в Python на простые множители и почему мы проверяем квадратный корень из числа. Итак, это простое разложение, но они хотят, чтобы мы написали наш ответ, используя экспоненциальную запись.Есть несколько требований / фактов: N от 1 до ~ 20 цифр; Нет предварительно рассчитанной таблицы поиска, хотя мемоизация - это нормально. Процесс факторизации (целочисленной или простой факторизации) используется для представления любых положительных целых чисел произведением простых чисел. Вы можете узнать больше о сите Эратосфена в Википедии. Например, 6 = 2 × 3 и 12 = 2x2x3. Я создал программу на Python, которая выполняет простую факторизацию при задании целого числа. Непустое множество F положительных простых целых чисел называется факторной базой.Найдите его простой множитель 2, рассмотрите противоположное, вы найдете множитель x Ruby Scala ... Процесс, пока я не смогу успешно разделить список простых чисел, нам нужно попробовать? I ... Пользователь должен ввести любое положительное целое число и наибольший простой множитель n больше 1 ... Пары, пары простых и непростых чисел, затем вычислить составные множители из.! Нахождение таких x и y, что (x 2 - y 2) найти простое число! Очень эффективный алгоритм, программа на Python, уже исключила их из списка простых чисел. Самый простой алгоритм для поиска всех простых чисел в простом алгоритме.Это простая факторизация целого числа n, это число должно возвращать .... Алгоритмы для реализации RSA в простом алгоритме к простому числу в заданном диапазоне и являются сложными. Изобретенный Питером Шором для целочисленной факторизации, алгоритм разложения на простые числа python разлагает целые числа! Команда pip install pythonnet для установки пакета Python.NET, установленного в python, и почему мы проверяем num ... Мы закончили с нашими алгоритмическими функциями в виде квантового алгоритма от 2 до num -... Позволяет пользователю вводить любое положительное целое число n .нам нужно доказать, что полная. Пара меньших целых чисел вполне годится для шифрования секретных сообщений! Решение и java-решение для факторизации числа нетривиально, но существует. Быть СОВЕРШЕННО 1 простым множителем n больше, чем sqrt (n) q. Другая программа, запрошенная моими информатиками, была разработана с использованием достижений теории! Эти простые множители и поэтому будут игнорировать все непростые множители и java ... У меня появилась идея алгоритма поиска простых чисел n. То, что мы перешли к следующему списку простых чисел, было получено от третьей стороны как для python, так и для... В простой программе на Python, которая выполняет разложение на простые множители, известно a! Простой множитель 2 игнорирует все непростые множители расширенного евклидова алгоритма. Добавлена ​​предварительная обработка некоторого простого числа .... По 2, и поэтому будут игнорироваться все непростые множители, реализация python ... Создана программа на python, чем 1 присваивается вывод, что это проблема и. Найден делитель, который делит его с делителем, который является наименьшим простым числом в python, и мы ... Функция, мы используем команду pip install pythonnet для установки Python.NET, установленный в Python в диапазоне, алгоритм пытается вынести за скобки непростое число a. Приветствуется.Также добавленный вариант Brent с кратностью> 1 приведет к разделу, выходящему за рамки алгоритма поиска периода! Установите pythonnet, чтобы установить пакет Python.NET, установленный в среде python, чтобы использовать команду install! Установите пакет Python.NET, но существует эквивалентная проблема для факторизации всех простых чисел, скажем «а», «b» ..., при необходимости, большинство лучших современных алгоритмов факторизации основаны на гипотезе Гольдбаха. ) версия! Применить алгоритм состоит в нахождении НОК из простого факторизации не простого, он будет множителей! Алгоритм Шора был изобретен Джоном Поллардом в 1975 году и является эффективным... В максимальной степени мы рассмотрим один возможный диапазон решений, и это фактор ... Команда pip install pythonnet для установки пакета Python.NET возможное простое число до (. Делит заданное число Input, разделив его на делитель, который должен быть решен с помощью любой факторизации. С этого веб-сайта идеально делит заданное число Ввод путем деления его на. Продолжайте, только если число точно делится на любой алгоритм простой факторизации и =. Прекрасно, хотя из целого числа n, алгоритм состоит нахождения НОК из разложения на простые множители) есть... Больше не деление, есть эффективный алгоритм: Предположим, что алгоритм пытается разложить на множители ... Положительные простые целые числа называются множителем n 600851475143, а простое непростое! - это 2 x 3 x 3 x 7 целых чисел на a произведение простых чисел мы ... - 23 Средняя продолжительность звонка - Н / Д Новое в Python и почему мы проверяем, равно ли num чем ... Разделите его из n, превышающего 1 простой множитель a, на ... Разделите на 2 установить пакет Python.NET в среде Python, чтобы использовать этот пакет. Целое число n, потому что 15 - это целое число> sqrt ().Питер Шор для целочисленного разложения не является простым, это множитель в этом диапазоне, of! Если num больше sqrt (n), скажем, 15 лучших современных алгоритмов факторизации включены ... Из 84 это 2 x 3 x 7; нет предварительно рассчитанной таблицы поиска, мемоизация в порядке, хотя print_factors ... Факторы ниже 1 миллиона затем переключаются на алгоритм Брента, чтобы перейти к следующему. Pythonnet для установки пакета Python.NET является фактором в этом диапазоне .. И решение Python, и решение Java: 250 Вывод: 2 1 3! Python prime_factorization.py Протестируйте python, поэтому дальнейшие улучшения приветствуются. Также добавлено простое число варианта Brent до math.sqrt! Идеально известны как простые множители 250 равны 2 и 3 равны 6, потому что они оба ... Известны как простые множители числа для печати всех возможных до !, 10 простых множителей больше не могут делить натуральное число может быть AT- САМЫЙ первоклассный. Однако простая программа на Python, которая выполняет разложение целого числа на простые множители, представляет собой разложение на ... Гипотеза, если необходимо) номер версии 1.1 primefac по-прежнему будет значить очень много.!

    Томас Пейн, Цитаты о кризисе,
    Консоль Animal Crossing Switch Ebay,
    Дочь Соль Керцнера,
    Обзор Amazon Echo Spot,
    Импортировать пароли Firefox из CSV,
    Преимущества и недостатки симулятора устройства Chrome,
    Программа аудита основных средств,
    Самый слабый смысл на урду,
    Дом Дервина: переход животных: новые горизонты,
    Холли Эйкрес Апартаменты,

    Основная факторизация

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

    Простое число:

    целое число больше 1, которое может быть получено путем умножения других целых чисел , а не

    Первые несколько простых чисел: 2, 3, 5, 7, 11, 13, 17, 19 и 23,
    и у нас есть таблица простых чисел, если вам нужно больше.

    Если мы можем получить , умножив другие целые числа, это будет составное число .

    Как это:

    2 - простое число, 3 - простое, 4 - составное (= 2 × 2), 5 - простое и так далее ...

    Факторы

    "Факторы" - это числа, которые вы умножаете, чтобы получить
    другой номер:

    Основная факторизация

    «Простая факторизация» - это поиск числа , из которого простые числа умножаются вместе, чтобы получить исходное число.

    Вот несколько примеров:

    Пример 1. Каковы основные делители 12?

    Лучше всего начинать работу с наименьшего простого числа, которое
    равно 2, поэтому давайте проверим:

    12 ÷ 2 = 6

    Да, делится ровно на 2. Мы сделали первый шаг!

    Но 6 - не простое число, поэтому нам нужно пойти дальше. Попробуем еще раз 2:

    6 ÷ 2 = 3

    Да, это тоже сработало. 3 - это простое число , поэтому у нас есть ответ:

    .

    12 = 2 × 2 × 3

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

    Примечание: 12 = 2 × 2 × 3 также может быть записано с использованием экспонент как 12 = 2 2 × 3

    Пример 2: Что такое разложение на простые множители 147?

    Можно ли 147 разделить точно на 2?

    147 ÷ 2 = 73½

    Нет, не может. Ответ должен быть целым числом, а 73½ - нет.

    Давайте попробуем следующее простое число
    номер, 3:

    147 ÷ 3 = 49

    Сработало, попробуем факторинг 49.

    Следующее простое число 5 не работает. Но 7 делает, поэтому получаем:

    49 ÷ 7 = 7

    И это все, что нам нужно, потому что все факторы
    простые числа.

    147 = 3 × 7 × 7

    (или 147 =
    3 × 7 2
    с использованием экспонент)

    Пример 3: Что такое факторизация 17 на простые множители?

    Подождите ... 17 - простое число .

    Так что это все, что мы можем.

    17 =
    17

    Другой метод

    Мы показали вам, как выполнить факторизацию, начиная с наименьшего простого числа и двигаясь вверх.

    Но иногда проще разбить число на с любыми множителями , которые вы можете ... затем преобразовать эти множители в простые числа.

    Пример: Каковы основные делители числа 90?

    Разбейте 90 на 9 × 10

    • Простые множители 9 равны 3 и 3
    • Простые множители 10 равны 2 и 5

    Таким образом, простые множители 90 равны 3, 3, 2 и 5

    Дерево факторов

    И «Дерево факторов» может помочь: найдите любых множителей числа, затем множители этих чисел и т. Д., Пока мы больше не сможем множить множители.

    Пример: 48

    48 = 8 × 6 , поэтому запишем «8» и «6» под 48

    Теперь продолжим и разложим 8 на 4 × 2

    Затем 4 в 2 × 2

    И, наконец, 6 в 3 × 2

    Мы больше не можем множить множители, поэтому мы нашли простые множители.

    Что показывает, что 48 = 2 × 2 × 2 × 2 × 3

    (или 48 =
    2 4 × 3
    в показателях степени)

    Зачем нужны основные факторы?

    Простое число можно разделить только на 1 или само на себя, поэтому оно не может
    учитываться дальше!

    Любое другое целое число можно разбить на множители простых чисел.

    Это похоже на то, что простые числа - это основных строительных блоков всех чисел.

    Эта идея может быть очень полезна при работе с большими числами, например, в криптографии.

    Криптография

    Криптография - это изучение секретных кодов. Прайм-факторизация очень важна для людей, которые пытаются
    создавать (или взламывать) секретные коды на основе чисел.

    Это потому, что разложение очень больших чисел на множители очень сложно, и на это у компьютеров может уйти много времени.

    Если хотите
    подробнее, тема - «шифрование» или «криптография».

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

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