Косвенно, вы можете использовать генетический алгоритм для факторизации целого числа N. Метод целочисленной факторизации Диксона использует уравнения со степенями первых k простых чисел, по модулю N. Эти произведения степенеймалых простых чисел называются «гладкими».Если мы используем первые k = 4 простых чисел - {2,3,5,7} - 42 = 2x3x7 является гладким, а 11 - нет (из-за отсутствия лучшего термина 11 - "грубый"),Метод Диксона требует обратимой k x k матрицы, состоящей из показателей, определяющих эти гладкие числа.Подробнее о методе Диксона см. https://en.wikipedia.org/wiki/Dixon%27s_factorization_method.
Теперь вернемся к первоначальному вопросу: существует генетический алгоритм для нахождения уравнений для метода Диксона.
- Пусть r будет инверсией сглаженного числа mod N - поэтому r является грубым числом
- Пусть s будет гладким
- Генерация случайных решенийrx = sy mod N. Эти решения [x, y] являются популяцией для генетического алгоритма.Каждый x, y имеет гладкий компонент и грубый компонент.Например, предположим, что x = 369 = 9 x 41. Тогда (при условии, что 41 не достаточно мал, чтобы считать его гладким), шероховатая часть x равна 41, а гладкая - 9.
- Выберите пары решений -«родители» - объединять в линейные комбинации с еще меньшими шероховатыми частями.
- Алгоритм заканчивается, когда пара [x, y] найдена с шероховатыми частями [1,1], [1, -1][-1,1] или [-1, -1].Это приводит к уравнению для метода Диксона, потому что rx = sy mod N и r - единственное оставшееся приблизительное число: x и y гладкие, и s началось гладко.Но даже 1 / r mod N является гладким, так что все гладко!
Каждый раз, когда вы объединяете две пары - скажем, [v, w] и [x, y] - гладкие части четырехчисла стираются, за исключением факторов, которые имеют гладкие части v и x, и факторов, которые имеют гладкие части w и y.Поэтому мы выбираем родителей, которые делят гладкие части в максимально возможной степени.Чтобы сделать это более точным, напишите
g = gcd (гладкая часть v, гладкая часть x)
h = gcd (гладкая часть w, гладкая часть y)
[v, w], [x, y] = [gv / g, hw / h], [gx / g, hy / h].
с трудом завоеванные коэффициенты сглаживания g и h будутбудут сохранены в следующем поколении, но гладкие части v / g, w / h, x / g и y / h будут принесены в жертву, чтобы объединить [v, w] и [x, y].Поэтому мы выбираем родителей, для которых v / g, w / h, x / g и y / h имеют наименьшие гладкие части.Таким образом, мы действительно приводим грубые части наших решений к rx = sy mod N от одного поколения к следующему.