Метод факторизації Діксона
Метод факторизації Діксона(або алгоритм Діксона) є універсальним алгоритмом факторизації. Метод заснований на багаторазовому виділенні з числа його множника. Складність алгоритму не залежить від кількості його простих множників. Алгоритм був створений Джоном Діксоном, математиком Карлетонського університету, і був опублікований в 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.