Кіріспе

Бүкіл сандық факторлау алгоритмі
бүкіл сандық факторлау алгоритмі

Полардтың rho алгоритмі – бүтін сандық факторлауға арналған алгоритм. Оны 1975 жылы Джон Поллард ойлап тапты. Алгоритм аз ғана жадты пайдаланады, ал оның күтілетін жұмыс уақыты факторланатын құрама санның ең кіші жай көбейткішінің квадрат түбіріне пропорционалды.

Негізгі идеялар

Алгоритм санды факторлау үшін қолданылады, мұнда – тривиалды емес фактор. Псевдорандомдық тізбек құру үшін (мысалы, ) деп аталатын модуль бойынша полином қолданылады. Бұл полином болуы керек екенін ескеру қажет. Бастапқы мән, мысалы, 2 таңдалады, ал тізбек , , және т.б. ретімен жалғасады. Тізбек басқа тізбекпен байланысты. Бірақ ол алдын ала белгісіз болғандықтан, бұл тізбекті алгоритмде нақты есептеу мүмкін емес. Дегенмен, бұл алгоритмнің негізгі идеясы болып табылады. Мүмкін мәндердің саны шекті болғандықтан, тізбек те, mod , және тізбек те, тіпті бұл мәндер белгісіз болса да, әлдебір уақытта қайталанады. Егер тізбектердегі мәндер кездейсоқ сандар сияқты болып өзгеретін болса, туған күн парадоксы бойынша, қайталану алдындағы саны , мұнда – мүмкін мәндердің саны болады деп күтілуі мүмкін. Сондықтан, тізбек тізбектен әлдеқайда ертерек қайталанады. Егер біз сонды таба алсақ, онда , бірақ , онда сан санының еселігі болады, яғни – факторы табылды. Тізбекте қайталанатын мән пайда болғаннан кейін, тізбек циклдік болады, өйткені әрбір мән тек алдыңғы мәнге ғана тәуелді. Осы циклдік құрылым "rho алгоритмі" деген атқа ие болды, себебі мәндерін бағытталған графтың түйіндері ретінде көрсеткенде, олар грек әрпінің ρ пішініне ұқсайды. Бұл Флойдтың цикл табу алгоритмімен анықталады: екі түйін және (яғни, және ) сақталады. Әр қадамда біреуі тізбектегі келесі түйінге, ал екіншісі екі түйінге жылжиды. Содан кейін, егер ол 1-ге тең болмаса, онда тізбекте қайталану бар екені анықталады (яғни ). Бұл жұмыс істейді, өйткені егер , онда арасындағы айырмашылық міндетті түрде санының еселігі болады. Бірақ бұл әрқашан соңымен болады, нәтижесінде ең үлкен ортақ бөлгіш (GCD) санының 1-ден өзге бөлгіші болады. Бұл өзі де болуы мүмкін, егер екі тізбек бір уақытта қайталануы мүмкін болса. Мұндай (сирек) жағдайда алгоритм сәтсіз аяқталады және басқа параметрмен қайтадан іске қосылуы мүмкін.

Нұсқалар

1980 жылы Ричард Брент rho алгоритмінің жылдамдатылған нұсқасын жариялады. Ол Поллард сияқты негізгі идеяларды пайдаланды, бірақ циклді анықтаудың басқа тәсілін қолданды, Флойдтың цикл табу алгоритмін Бренттің осымен байланысты цикл табу әдісімен алмастырды. Бұл әдісті Поллард пен Брент одан әрі жетілдірді. Олар егер , онда кез келген оң бүтін b үшін де осыған тең екенін байқады. Атап айтқанда, әр қадамда есептеудің орнына, z-ді n модулі бойынша 100 тізбектелген шарттың көбейтіндісі ретінде анықтау жеткілікті, содан кейін 100 gcd қадамы 99 көбейту және бір gcd операциясымен алмастырылады, бұл үлкен жылдамдыққа әкеледі. Кейде бұл алгоритмнің сәтсіздікке ұшырауына себеп болуы мүмкін, мысалы, n квадрат болған жағдайда, қайталанатын көшбасшы енгізіледі. Бірақ онда бұрынғы gcd шартқа қайтып, ондағы стандартты ρ алгоритмін қолдану жеткілікті.

Қолдану

Алгоритм кіші факторлары бар сандар үшін өте жылдам, бірақ барлық факторлары үлкен болған жағдайларда баяулайды. ρ алгоритмінің ең айқын жетістігі – 1980 жылы Ферма санының F8 = 1238926361552897 × 93461639715357977769163558199606896584051237541638188580280321 түріндегі жіктелуі. ρ алгоритмі F8 үшін тиімді таңдау болды, себебі p = 1238926361552897 жай коэффициенті екінші фактордан әлдеқайда кіші. Бұл жіктелу UNIVAC 1100/42 компьютерінде 2 сағатқа созылды.