Кіріспе

Факторлау алгоритмі
Сандар теориясында жалпы сандар өрісі сырғасы (GNFS) – 10^(100)-ден үлкен бүтін сандарды факторлау үшін ең тиімді классикалық алгоритм болып табылады. Эвристикалық тұрғыдан алғанда, n бүтін санды (біттерден тұратын) факторлаудың күрделілігі O және L белгілерінде көрсетілген түрде өрнектеледі. Бұл арнайы сандық өріс сырғасының жалпылауы: соңғысы тек белгілі бір арнайы формадағы сандарды ғана факторлай алады, ал жалпы сандық өріс сырғасы негізгі күштерден басқа кез келген санды факторлай алады (олар түбірлерді шығарып, оңай факторланады). Сандық өріс сырғасының (арнайы да, жалпы да) принципін қарапайым рационалды немесе квадраттық сырғалаудың жетілдірілген түрі деп түсінуге болады. Үлкен n санын факторлау үшін мұндай алгоритмдерді қолданғанда, n^(1/2) ретіндегі тегіс сандарды (яғни, кішкентай жай көбейткіштері бар сандарды) іздеу қажет. Бұл мәндердің мөлшері n-нің мөлшеріне қатысты экспоненциалды түрде өседі (төменде қараңыз). Ал жалпы сандық өріс сырғасы n-нің мөлшеріне қатысты субэкспоненциалды тегіс сандарды іздеуге мүмкіндік береді. Бұл сандар кішкентай болғандықтан, бұрынғы алгоритмдерде тексерілген сандарға қарағанда тегіс болу ықтималдығы жоғары. Осы себепті сандық өріс сырғасының тиімділігіне қол жеткізіледі. Бұл жылдамдықты арттыру үшін сандық өріс сырғасы сандық өрістерде есептеулер мен факторлауды жүргізуі керек. Бұл қарапайым рационалды сырғамен салыстырғанда алгоритмнің көптеген күрделі аспектілеріне әкеледі. Алгоритмге берілетін деректердің көлемі log2 n немесе n-нің екілік өрнектемесіндегі биттер саны болып табылады. Кез келген элемент n^(c) түрінде, тұрақты c үшін log n-де экспоненциалды болады. Сандық өріс сырғасының жұмыс істеу уақыты кіріс мөлшеріне қатысты суперполиномдық, бірақ субэкспоненциалды.

Әдіс

Екі полиномиал f(x) және g(x) кіші дәрежелі d және e таңдалады, олардың бүтін сандар коэффициенттері бар, олар рационалдарға келтірілмейді және олар mod n деп түсіндірілгенде, ортақ бүтін сан түбірі m болады. Бұл полиномиалдарды таңдаудың оңтайлы стратегиясы белгісіз; бір қарапайым әдіс - полиномиал үшін d дәрежесін таңдау, n-нің n1/d реттік сандарының базасында (−m мен m арасындағы сандарды рұқсат ету) кеңейтуін қарастыру және f(x) ең кіші коэффициенттері бар полиномиал ретінде, ал g(x) x − m ретінде таңдау. Z[r1] және Z[r2] сандық сақиналарын қарастырайық, мұнда r1 және r2 - f және g полиномиалдарының түбірлері. f d дәрежелі және бүтін сандар коэффициенттерімен болғандықтан, егер a және b бүтін сандар болса, онда bd·f(a/b) да бүтін сан болады, оны r деп атаймыз. Сол сияқты, s = be·g(a/b) да бүтін сан. Мақсат - a және b-нің бір мезгілде r және s-ті таңдалған алғашқы сандар базасына қатысты тегіс ететін бүтін сандық мәндерін табу. Егер a және b кіші болса, онда r және s да кіші болады, шамамен m-нің өлшеміне тең, және олардың бір уақытта тегіс болу мүмкіндігі жоғары. Бұл іздеудің ең танымал тәсілі - торлы ілкіш; қолайлы өнімді алу үшін үлкен факторлық базаны пайдалану қажет. Мұндай жұптар жеткілікті болған кезде, Гаусс жоюын пайдаланып, белгілі бір r және сәйкес келетін s өнімдерін бір уақытта квадраттар ретінде алуға болады. Бұл сандар біздің сандық өрістердегі квадраттардың нормалары деген сәл күштірек шарт қажет, бірақ бұл шарт осы әдіспен де орындалуы мүмкін. Әр r - a − r1b нормасы, сондықтан a − r1b сәйкес факторларының көбейтіндісі Z[r1]-дегі квадрат болып табылады, оның "квадрат түбірі" анықталуы мүмкін (Z[r1]-дегі белгілі факторлардың көбейтіндісі ретінде) – ол әдетте иррационалды алгебралық сан ретінде бейнеленеді. Сол сияқты a − r2b факторларының көбейтіндісі Z[r2]-дегі квадрат болып табылады, оны да есептеуге болады. Гаусс жоюын қолдану алгоритмнің оңтайлы жұмыс уақытын бермейді. Оның орнына, Block Lanczos немесе Block Wiedemann сияқты сирек матрицалық шешу алгоритмдері қолданылады. m f және g mod n-нің түбірі болғандықтан, Z[r1] және Z[r2] сақиналарынан Z/nZ сақинасына (modulo n бүтін сандары) гомоморфизмдер бар, олар r1 және r2-ні m-ге бейнелейді, ал бұл гомоморфизмдер әр "квадрат түбірін" (әдетте рационалдық сан ретінде көрсетілмейді) бүтін санның өкіліне бейнелейді. Енді a − mb mod n көбейткіштерінің көбейтіндісін екі жолмен квадрат ретінде алуға болады - әр гомоморфизм үшін бір. Осылайша, x2 − y2 n-ге бөлінетін екі санды x және y табуға болады және тағы да кем дегенде бір жартысын ықтималдығымен n-нің ең үлкен ортақ бөлгішін тауып, n-нің көбейткішін аламыз.

Көптамалық таңдауды жақсарту

Полиномиалды таңдау алгоритмнің қалған бөлігін орындау уақытына күрт әсер ете алады. Жоғарыда көрсетілген n-нің m негізіндегі кеңеюіне негізделген полиномиалдарды таңдау әдісі көптеген практикалық жағдайларда тиімсіз болып табылады, соның салдарынан жақсырақ әдістер әзірленді. Мёрфи мен Брент осындай әдісті ұсынды; олар полиномиал үшін екі бөліктен тұратын бағалау жүйесін енгізді, ол кіші қарапайым сандар бойынша түбірлердің болуына және полиномиалдың іріктеу аймағындағы орташа мәніне негізделген. Торстен Клейнюнг әдісі ең жақсы нәтижелерді көрсетті, ол 2d модулі бойынша 1-ге конгруэнтті кіші жай факторларынан құралған және 60-қа бөлінетін f полиномиалының жетекші коэффициенттері бойынша іздеуді жүзеге асыруға мүмкіндік береді.