DEV Community

Cover image for Արդյո՞ք թիվը պարզ է (Prime Numbers)
Arsen Mazmanyan
Arsen Mazmanyan

Posted on

4

Արդյո՞ք թիվը պարզ է (Prime Numbers)

Բարև սիրելի ծրագրավորող (կամ ապագա ծրագրավորող)։

Այսօր կնայենք հարցազրույցների ժամանակ ամենատարածված խնդիրներից մեկը՝ թվի պարզությունը ստւգելու խնդիրը և այդ խնդրի լուծման եղանակներից մի քանիսը։

Սակայն մինչև առաջ անցնելը 2 կարևոր բան
֊ Խնդիրների լուծումները կլինեն JavaScript լեզվով,
֊ Ես ներկայացնում եմ խնդիրը լուծելու գաղափարները և չեմ բացատրելու, թե որ ֆունկցիան իրենից ինչ է ներկայացնում, սակայն կտեղադրեմ համապատասխան հղումները, որպեսզի դու ինքդ ուսումնասիրես դրանք:

Եթե սիրում ես խնդիրներ լուծել, ուրեմն արդեն լուծել ես այսպիսի խնդիր։ Կամ հարցազրույցի ժամանակ առընչվել ես այսպիսի խնդրի։


Նախ հասկանանք խնդիրը։
Ո՞ր թվերն են համարվում պարզ թվեր։
Պարզ թիվ է կոչվում այն բնական թիվը (բացի 1-ից), որը ունի միայն երկու բաժանարար։ Այսինքն բաժանվում են միայն մեկի և իր վրա ։

Ի՞նչպես կարող ենք ստուգել թվի պարզ լինելը։
Ենթադրենք մեզ տրված թիվը N թիվն է։
Պարզապես կարող ենք մինչև N բոլոր թվերը հերթով ստուգել և եթե գտնենք 1֊ից և N֊ից տարբեր այնպիսի թիվ, որի վրա N֊ը բաժանելիս ստանում ենք 0 մնացորդ, ուրեմն թիվը պարզ չէ։

Ընդունենք, որ մեր ֆունկցիային փոխանցվող արգումենտը միշտ 1֊ից տարբեր բնական թիվ է լինելու {2,3,4,5,...}:

Մեզ պետք է գտնենլ 1֊ից և N֊ից տարբեր թիվ, հետևաբար կարող ենք ստուգել [2, N-1] միջակայքի թվերը, ներառյալ։

code javascript

Կոդը տեղադրված է այս հղման մեջ

Այս եղանակի վրա կարող ենք որոշակի օպտիմիզացիաներ կատարել։
Օրինակ կարող ենք ստուգել մինչև N/2, որովհետև (N/2, n] միջակայքում այնպիսի թիվ չկա, որի վրա բաժանելիս կստանանք` ամբողջ թիվ (կստանանք 1ից մեծ և 2ից փոքր թվեր)։ Այսպիով մեր քալերի քանակը 2 անգամ կկրճատվի։

code javascript

Կոդը տեղադրված է այս հղման մեջ


Սակայն կա մեկ այլ, ավելի օպտիմալ տարբերակ, որը սկզբից կբացատրեմ մաթեմատիկական եղանակով։

Ցանկացած բնական, ոչ պարզ N թիվ կարող ենք ներկայացնել A * B տեսքով, որտեղ A, B֊ն նույնպես բնական թվեր են։
Ունենք M դրական իրական թիվը, որը N թվի քառակուսի դրական արմատն է՝ M = |√ N|:

Քանի որ M * M = N և N = A * B, ապա M * M = A * B

Նկատենք, որ ստորև նշված 3 պայմաններից մեկը միշտ տեղի ունի։

  1. A > M => B < M
  2. A = M => B = M
  3. A < M => B > M

Բոլոր 3 դեպքերի համար 1 ընդհանուր բան կա՝ (A,B)-ից փոքրագույնի արժեքը փոքր կամ հավասար է M֊ից (min(A,B) ≤ M):
Հետևաբար նրանցից մեծագույնը մեծ կամ հավասար է M֊ից (max(A,B) ≤ M):

Այսինքն, եթե N թիվը պարզ չէ, ուրեմն [2,M] միջակայքում գոյություն ունի գոնե 1 այնպիսի թիվ, որի վրա N֊ը առանց մնացորդ բաժանվում է։ Հակառակ դեպքում թիվը պարզ է։

Այս ալգորիթմը էլ ավելի քիչ քայլում է կատարվում, քայլերի քանակը հասցնելով √N֊ի։

code javascript

Կոդը տեղադրված է այս հղման մեջ

Հույս ունեմ, այս նյութը քեզ օգնեց նոր գաղափարներ և նոր գիտելիք ստանալու հարցում։ Իսկ եթե ունես այնպիսի լուծման եղանակ, որը այստեղ նշված չէ, շատ ուրախ կլինեմ, եթե քո տարբերակը ուղարկես ինձ, այդպիսով փորձի փոխանակում կանենք։

AWS Security LIVE!

Tune in for AWS Security LIVE!

Join AWS Security LIVE! for expert insights and actionable tips to protect your organization and keep security teams prepared.

Learn More

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs