Кіріспе

Бастапқы сандарды табу алгоритмдері

Есептеулік сандар теориясында бастапқы сандарды тиімді түрде табуға мүмкіндік беретін әртүрлі алгоритмдер бар. Олар хэшинг, ашық кілттің криптографиясы және үлкен сандардың жай көбейткіштерін табу сияқты түрлі қолданыстарда қолданылады. Шамалы сандар үшін, кезекті тақ санға сынақ бөлуді қолдануға болады. Бірақ жай сандарды іздеу (просеивание) әлде де жылдам. Жай сандарды іздеу – жай сандарды детерминистік түрде табудың ең жылдам белгілі әдісі. Келесі жай санды есептей алатын белгілі формулалар бар, бірақ келесі жай санды бұрынғы жай сандар арқылы өрнектеудің белгілі жолы жоқ. Сондай-ақ, келесі жай санды детерминистік түрде есептейтін математикалық өрнектің (кейінгі жай сандарды қоса алғанда) тиімді жалпы манипуляциясы немесе кеңейтілуі белгілі емес.

Басты сырғалар

Бастапқы сүзгі немесе алғашқы сандар сүзгісі – алғашқы сандарды табуға арналған жылдам алгоритм түрі. Көптеген бастапқы сүзгілер бар. Эратоспеннің қарапайым сүзгісі (б.з.д. 250 жылдары), Сундарамның сүзгісі (1934), одан да жылдам, бірақ күрделі Аткиннің сүзгісі (2003) және түрлі дөңгелек сүзгілер ең көп қолданылады. Бастапқы сүзгі, қажетті лимитке дейінгі барлық бүтін сандар тізімін жасау және тек алғашқы сандар қалғанша құрама сандарды (оларды тікелей анықтап шығару арқылы) біртіндеп жою арқылы жұмыс істейді. Бұл алғашқы сандардың кең ауқымын алудың ең тиімді жолы; алайда, жеке алғашқы сандарды табу үшін тікелей алғашқылықты тексерулер тиімдірек. Сонымен қатар, сүзгінің формальды негізінде кейбір бүтін сандар тізбектері құрастырылады, оларды белгілі бір интервалдарда алғашқы сандарды табу үшін де пайдалануға болады.

Үлкен жай сандар

Криптографияда қолданылатын үлкен жай сандар үшін, Поклингтонның жайлық сынағының түрлеріне негізделген дәлелді жай сандар жасалуы мүмкін, ал ықтимал жай сандар Бейли-PSW жайлық сынағы немесе Миллер-Рабин жайлық сынағы сияқты ықтималды жайлық сынақтарымен жасалуы мүмкін. Дәлелді және ықтимал жайлық сынақтарының екеуі де модульдік дәрежелеуге сүйенеді. Есептеу шығындарын одан да азайту үшін, бүтін сандар алдымен Эратоспенің елегіне ұқсас немесе қарапайым бөлу арқылы кез келген кіші жай бөлгіштерге тексеріледі. Мерсенн жай саны немесе Ферма жай саны сияқты ерекше формадағы бүтін сандар, егер p-1 немесе p+1 жай факторлануы белгілі болса, жайлыққа тиімді тестілеуге болады.

Күрделілігі

Эратостеннің сырғасы, әдетте, іске асыру үшін ең оңай сырға деп саналады, бірақ ол үлкен сырғалау диапазондары үшін берілген ауқымдағы операциялардың саны жағынан ең жылдам емес. Оның әдеттегі стандартты іске асырылуы (кішігірім жай сандар үшін негізгі дөңгелек факторлауды қамтуы мүмкін), ол барлық N-ге дейінгі жай сандарды уақыт ішінде таба алады, ал Аткиннің сырғасы мен дөңгелек сырғаларының негізгі іске асырылуы сызықтық уақытта жұмыс істейді. Аткиннің сырғасының арнайы нұсқасы және Эратостеннің сырғасынан алынған әдістерді пайдалана отырып сырғалауды қамтитын дөңгелек сырғаларының кейбір арнайы нұсқалары сызықтық уақыт күрделілігінде жұмыс істей алады. Алгоритмнің асимптотикалық уақыт күрделілігі төмендеуі оның практикалық іске асырылуы асимптотикалық уақыт күрделілігі жоғары алгоритмнен жылдам жұмыс істейтінін білдірмейді: Егер сол аз асимптотикалық күрделілікке қол жеткізу үшін жекелеген операциялардың уақыт күрделілігінің өсуінің тұрақты факторы бар болса, ол қарапайым алгоритмге қарағанда бірнеше есе үлкен болуы мүмкін, бұл операцияға қосымша уақытты өтеу үшін жеткілікті үлкен диапазондар үшін операциялардың қысқартылған санының артықшылығы үшін практикалық сырғалау диапазондарында ешқашан мүмкін болмауы мүмкін. Кейбір сырғалау алгоритмдері, мысалы үлкен мөлшерде дөңгелек факторлаумен Эратостеннің сырғасы, олардың асимптотикалық уақыт күрделілігі көрсететініне қарағанда кішігірім диапазондар үшін әлдеқайда аз уақыт алады, өйткені олардың күрделілігі үлкен теріс тұрақты ауытқуларға ие және осылайша практикалық диапазоннан тыс болғанша, бұл асимптотикалық күрделілікке жетпейді. Мысалы, Эратостеннің сырғасы дөңгелек факторлау мен 19 дейін кішігірім жай сандарды пайдалануды алдын ала таңдау комбинациясымен 1019-дың жалпы ауқымы үшін болжалданғаннан екі есе аз уақыт пайдаланады, бұл жалпы ауқымы ең жақсы сырғалау алгоритмі үшін жүздеген негізгі жылды қажет етеді. Осы сырға түрлерінің кез келгенінің қарапайым "бір үлкен сырғалау массиві" сырғалары шамамен жад кеңістігін алады, бұл дегеніміз 1) олар қол жетімді RAM (жад) мөлшеріне қарай өткізе алатын сырғалау диапазондарында өте шектеулі және 2) олар әдетте өте баяу, өйткені жадқа қол жеткізу жылдамдығы, әдетте, жылдамдықтың бөтелкелі шегіне айналады. Эратосфен мен Аткиннің әдетте іске асырылатын беттік сегментті сырғалары кеңістікті және әдетте CPU кэшінде орналасу үшін өлшенген шағын сырға сегмент буферлерін алады; Эратосфен сырғасының арнайы түрлерін қоса алғанда, беттік сегментті дөңгелек сырғалары, әдетте, қажетті дөңгелек бейнелерін сақтау үшін, осыдан әлдеқайда көп орын алады; Эратосфен / дөңгелек сырғасының сызықтық уақыт күрделілігі сырғасының Притчардтың өзгеруі кеңістікті алады. Аткиннің сырғанағының уақыт күрделілігі жақсы ерекше нұсқасы кеңістікті алады. Соренсон дөңгелек сырғанаққа қарағанда жақсаруды көрсетеді, ол кез-келген уақытқа қарағанда аз орын алады. Алайда, жалпы байқау мынау: жад мөлшері неғұрлым аз болса, операцияға арналған уақыт шығынындағы тұрақты фактордың өсуі соғұрлым жоғары болады, тіпті асимптотикалық уақыт күрделілігі бірдей қалуы мүмкін, яғни жадты азайтылған нұсқалар жадты азайтпаған нұсқаларға қарағанда бірнеше есе баяу жүруге болады.