Метод факторизації Діксона
Метод факторизації Діксона(або алгоритм Діксона) є універсальним алгоритмом факторизації. Метод заснований на багаторазовому виділенні з числа його множника. Складність алгоритму не залежить від кількості його простих множників. Алгоритм був створений Джоном Діксоном, математиком Карлетонського університету, і був опублікований в 1981 році.
Складність алгоритму
При оптимальній реалізації складність алгоритму, як показано в становить:
в Нотації Ландау, або
В L-нотації.
Реалізація мовою С++
C++ функція, що знаходить множник числа методом Діксона:
int factor(int n) { int x, xx, y, d, q, rt; int i, j; rt = sqrt(double(n)); if (issquare(n)) return rt; x = rt; while(x++) { d = gcd(x, n); if (1<d && d<n) return d; xx = (x*x)%n; if(issquare(xx)) { y = sqrt(double(xx)); q = (x-y)%n; d = gcd(q, n); if(1<d && d<n) return d; } } return 0; }
Джерела
- J. D. Dixon, "Asymptotically fast factorization of integers," Math. Comput., 36(1981), p. 255-260
- код програми, що розкладає число на прості множники методом Діксона
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.