WikiDer > Sundaram elagi

Sieve of Sundaram

Yilda matematika, Sundaram elagi oddiy deterministik algoritm barchasini topish uchun tub sonlar belgilangan butun songacha. Tomonidan kashf etilgan Hind matematik janob S. P. Sundaram 1934 yilda.[1][2]

Algoritm

Sundaram elagi: 202 dan past darajadagi algoritm qadamlari (optimallashtirilmagan).

1 dan to butun sonlar ro'yxatidan boshlang n. Ushbu ro'yxatdan formaning barcha raqamlarini olib tashlang men + j + 2ij qaerda:

Qolgan raqamlar ikki baravar ko'paytiriladi va bitta tub sonlar ro'yxati berilgan (ya'ni 2 dan tashqari barcha tub sonlar) 2n + 1.

Sundaram elagi xuddi shu kabi kompozit sonlarni chiqarib tashlaydi Eratosfen elagi qiladi, lekin juft sonlar hisobga olinmaydi; 2-ning ko'paytmalarini "chizish" ishi oxirgi ikki barobar va o'sish bosqichi bilan amalga oshiriladi. Eratosfenning usuli har doim o'chirib tashlanadi k tub sonning turli xil ko'paytmalari , Sundaramning usuli kesib tashlanadi uchun .

To'g'ri

Agar biz butun sonlardan boshlasak 1 ga n, yakuniy ro'yxatda faqat toq sonlar mavjud 3 ga . Ushbu yakuniy ro'yxatdan ba'zi g'alati tamsayılar chiqarib tashlandi; biz buni aniq ko'rsatib berishimiz kerak kompozit dan kam toq sonlar .

Ruxsat bering q shaklning toq tamsayı bo'lishi . Keyin, q chiqarib tashlandi agar va faqat agar k shakldadir , anavi . Keyin bizda:

Shunday qilib, g'alati butun son, agar u shaklni faktorizatsiyalashga ega bo'lsa, oxirgi ro'yxatdan chiqarib tashlanadi - agar u ahamiyatsiz bo'lmagan g'alati omilga ega bo'lsa. Shuning uchun ro'yxat aniq toq to'plamdan iborat bo'lishi kerak asosiy dan kam yoki unga teng sonlar .

def Sundaram elagi(n):    "" "Sundaram elagi - bu belgilangan butun songacha bo'lgan barcha tub sonlarni topish uchun oddiy deterministik algoritm." ""    k = (n - 2) // 2    inteers_list = [To'g'ri] * (k + 1)    uchun men yilda oralig'i(1, k + 1):        j = men        esa men + j + 2 * men * j <= k:            inteers_list[men + j + 2 * men * j] = Yolg'on            j += 1    agar n > 2:        chop etish(2, oxiri=' ')    uchun men yilda oralig'i(1, k + 1):        agar inteers_list[men]:            chop etish(2 * men + 1, oxiri=' ')

Shuningdek qarang

Adabiyotlar

  1. ^ V. Ramasvami Ayar (1934). "Sundaramning asosiy sonlar uchun elagi". Matematik talaba. 2 (2): 73. ISSN 0025-5742.
  2. ^ G. (1941). "Curiosa 81. Bosh sonlar uchun yangi elak". Scripta Mathematica. 8 (3): 164.

Tashqi havolalar