Кіріспе
Факторлау алгоритмі
Сандар теориясында жалпы сандар өрісі сырғасы (GNFS) – 10^(100)-ден үлкен бүтін сандарды факторлау үшін ең тиімді классикалық алгоритм болып табылады. Эвристикалық тұрғыдан алғанда, n бүтін санды (біттерден тұратын) факторлаудың күрделілігі O және L белгілерінде көрсетілген түрде өрнектеледі. Бұл арнайы сандық өріс сырғасының жалпылауы: соңғысы тек белгілі бір арнайы формадағы сандарды ғана факторлай алады, ал жалпы сандық өріс сырғасы негізгі күштерден басқа кез келген санды факторлай алады (олар түбірлерді шығарып, оңай факторланады). Сандық өріс сырғасының (арнайы да, жалпы да) принципін қарапайым рационалды немесе квадраттық сырғалаудың жетілдірілген түрі деп түсінуге болады. Үлкен n санын факторлау үшін мұндай алгоритмдерді қолданғанда, n^(1/2) ретіндегі тегіс сандарды (яғни, кішкентай жай көбейткіштері бар сандарды) іздеу қажет. Бұл мәндердің мөлшері n-нің мөлшеріне қатысты экспоненциалды түрде өседі (төменде қараңыз). Ал жалпы сандық өріс сырғасы n-нің мөлшеріне қатысты субэкспоненциалды тегіс сандарды іздеуге мүмкіндік береді. Бұл сандар кішкентай болғандықтан, бұрынғы алгоритмдерде тексерілген сандарға қарағанда тегіс болу ықтималдығы жоғары. Осы себепті сандық өріс сырғасының тиімділігіне қол жеткізіледі. Бұл жылдамдықты арттыру үшін сандық өріс сырғасы сандық өрістерде есептеулер мен факторлауды жүргізуі керек. Бұл қарапайым рационалды сырғамен салыстырғанда алгоритмнің көптеген күрделі аспектілеріне әкеледі. Алгоритмге берілетін деректердің көлемі log2 n немесе n-нің екілік өрнектемесіндегі биттер саны болып табылады. Кез келген элемент n^(c) түрінде, тұрақты c үшін log n-де экспоненциалды болады. Сандық өріс сырғасының жұмыс істеу уақыты кіріс мөлшеріне қатысты суперполиномдық, бірақ субэкспоненциалды.
In number theory, the general number field sieve (GNFS) is the most efficient classical algorithm known for factoring integers larger than 10^(100). Heuristically, its complexity for factoring an integer n (consisting of bits) is of the form
in O and L notations. It is a generalization of the special number field sieve: while the latter can only factor numbers of a certain special form, the general number field sieve can factor any number apart from prime powers (which are trivial to factor by taking roots). The principle of the number field sieve (both special and general) can be understood as an improvement to the simpler rational sieve or quadratic sieve. When using such algorithms to factor a large number n, it is necessary to search for smooth numbers (i. e. numbers with small prime factors) of order n^(1/2). The size of these values is exponential in the size of n (see below). The general number field sieve, on the other hand, manages to search for smooth numbers that are subexponential in the size of n. Since these numbers are smaller, they are more likely to be smooth than the numbers inspected in previous algorithms. This is the key to the efficiency of the number field sieve. In order to achieve this speed up, the number field sieve has to perform computations and factorizations in number fields. This results in many rather complicated aspects of the algorithm, as compared to the simpler rational sieve. The size of the input to the algorithm is log2 n or the number of bits in the binary representation of n. Any element of the order n^(c) for a constant c is exponential in log n. The running time of the number field sieve is super polynomial but sub exponential in the size of the input.
Әдіс
Екі полиномиал 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-нің көбейткішін аламыз.
Consider the number field rings Z[r1] and Z[r2], where r1 and r2 are roots of the polynomials f and g. Since f is of degree d with integer coefficients, if a and b are integers, then so will be bd·f(a/b), which we call r. Similarly, s = be·g(a/b) is an integer. The goal is to find integer values of a and b that simultaneously make r and s smooth relative to the chosen basis of primes. If a and b are small, then r and s will be small too, about the size of m, and we have a better chance for them to be smooth at the same time. The current best known approach for this search is lattice sieving; to get acceptable yields, it is necessary to use a large factor base. Having enough such pairs, using Gaussian elimination, one can get products of certain r and of the corresponding s to be squares at the same time. A slightly stronger condition is needed—that they are norms of squares in our number fields, but that condition can be achieved by this method too. Each r is a norm of a − r1b and hence that the product of the corresponding factors a − r1b is a square in Z[r1], with a "square root" which can be determined (as a product of known factors in Z[r1])—it will typically be represented as an irrational algebraic number. Similarly, the product of the factors a − r2b is a square in Z[r2], with a "square root" which also can be computed. It should be remarked that the use of Gaussian elimination does not give the optimal run time of the algorithm. Instead, sparse matrix solving algorithms such as Block Lanczos or Block Wiedemann are used. Since m is a root of both f and g mod n, there are homomorphisms from the rings Z[r1] and Z[r2] to the ring Z/nZ (the integers modulo n), which map r1 and r2 to m, and these homomorphisms will map each "square root" (typically not represented as a rational number) into its integer representative. Now the product of the factors a − mb mod n can be obtained as a square in two ways—one for each homomorphism. Thus, one can find two numbers x and y, with x2 − y2 divisible by n and again with probability at least one half we get a factor of n by finding the greatest common divisor of n and x − y.
Көптамалық таңдауды жақсарту
Полиномиалды таңдау алгоритмнің қалған бөлігін орындау уақытына күрт әсер ете алады. Жоғарыда көрсетілген n-нің m негізіндегі кеңеюіне негізделген полиномиалдарды таңдау әдісі көптеген практикалық жағдайларда тиімсіз болып табылады, соның салдарынан жақсырақ әдістер әзірленді. Мёрфи мен Брент осындай әдісті ұсынды; олар полиномиал үшін екі бөліктен тұратын бағалау жүйесін енгізді, ол кіші қарапайым сандар бойынша түбірлердің болуына және полиномиалдың іріктеу аймағындағы орташа мәніне негізделген. Торстен Клейнюнг әдісі ең жақсы нәтижелерді көрсетті, ол 2d модулі бойынша 1-ге конгруэнтті кіші жай факторларынан құралған және 60-қа бөлінетін f полиномиалының жетекші коэффициенттері бойынша іздеуді жүзеге асыруға мүмкіндік береді.