рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдЕрдкрдиреЗ рдЦрд╛рд▓реА рд╕рдордп рдореЗрдВ, рдЙрдиреНрд╣реЛрдВрдиреЗ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдореБрдЦреНрдп рдХрд╛рд░рдХреЛрдВ рдпрд╛ "
рдХрд╛рд░рдХ рдЪрд┐рддреНрд░" рдореЗрдВ
рдШрдЯрд╛рдХрд░ рдкреНрд░рд╛рдкреНрдд рдЪрд┐рддреНрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓рд┐рдЦрд╛ рдерд╛ред
рдпрд╣ 700 рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:

рдЕрдВрдХреЛрдВ рдХреЗ рд╕реНрдерд╛рди рд╕реЗ, рдпрд╣ рджреЗрдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рдХреБрд▓ 7 * 5 * 5 * 2 * 2 рд╣реИрдВред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдпрд╣ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрдИ рдЖрдпрд╛рдд рд╣реИрдВ: рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рдХреЛ рдореБрдЦреНрдп рдХрд╛рд░рдХреЛрдВ рдореЗрдВ рд╡рд┐рдШрдЯрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдФрд░ рдЖрд░реЗрдЦ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпред
module Factorization where import Math.NumberTheory.Primes.Factorisation (factorise) import Diagrams.Prelude import Diagrams.Backend.Cairo.CmdLine type Picture = Diagram Cairo R2
PrimeLayout рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ n (рдПрдХ рдкреНрд░рдзрд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП) рдФрд░ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреА рдЫрд╡рд┐ рд▓реЗрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рд╕рдордорд┐рдд рд░реВрдк рд╕реЗ рдЫрд╡рд┐ рдХреА n рдкреНрд░рддрд┐рдпреЛрдВ рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХрд░рддрд╛ рд╣реИред
primeLayout :: Integer -> Picture -> Picture
2 рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓рд╛ рд╣реИ: рдпрджрд┐ рдЫрд╡рд┐ рдКрдВрдЪрд╛рдИ рд╕реЗ рдЕрдзрд┐рдХ рд╡реНрдпрд╛рдкрдХ рд╣реИ, рддреЛ рджреЛ рдкреНрд░рддрд┐рдпрд╛рдВ рдПрдХ рдХреЗ рдКрдкрд░ рдПрдХ рдЦреАрдВрдЪреА рдЬрд╛рддреА рд╣реИрдВ, рдЕрдиреНрдпрдерд╛ рд╡реЗ рдХрдВрдзреЗ рд╕реЗ рдХрдВрдзрд╛ рдорд┐рд▓рд╛рдХрд░ рдЦреАрдВрдЪреА рдЬрд╛рддреА рд╣реИрдВред рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╣рдо рдХреЙрдкрд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рдПрдХ рдЫреЛрдЯреА рд╕реА рдЬрдЧрд╣ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ (рдХреНрд░рдорд╢рдГ рдЖрдзреА рдКрдВрдЪрд╛рдИ рдпрд╛ рдЪреМрдбрд╝рд╛рдИ рдХреЗ рдмрд░рд╛рдмрд░)ред
primeLayout 2 d | width d > height d = d === strutY (height d / 2) === d | otherwise = d ||| strutX (width d / 2) ||| d
рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЕрдЧрд░ рджреЛ рдХреЗ рдмрд░рд╛рдмрд░ рдХрдИ рдЧреБрдгрд╛рдВрдХ рд╣реИрдВ, рдФрд░ рд╣рдо рдХрдИ рдмрд╛рд░ рдкреНрд░рд╛рдЗрдо -рдЖрдЙрдЯ рдХрд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдХреБрдЫ рдРрд╕рд╛ рдорд┐рд▓рддрд╛ рд╣реИ:

рдпрджрд┐ рд╣рдо рд╣рдореЗрд╢рд╛ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рдмрдЧрд▓ рдореЗрдВ рдкреНрд░рддрд┐рдпрд╛рдВ рдЦреАрдВрдЪрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ

рдЬреЛ рдЗрддрдирд╛ рд╕реБрдВрджрд░ рдФрд░ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИред
рдЕрдиреНрдп рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЙрдЪрд┐рдд рдЖрдХрд╛рд░ рдХрд╛ рдПрдХ рдирд┐рдпрдорд┐рдд рдмрд╣реБрднреБрдЬ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдмрд╣реБрднреБрдЬ рдХреЗ рдХреЛрдиреЗ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдпреЛрдВ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рддреЗ рд╣реИрдВред
primeLayout pd = decoratePath pts (repeat d) where pts = polygon with { polyType = PolyRegular (fromIntegral p) r , polyOrient = OrientH } w = max (width d) (height d) r = w * c / sin (tau / (2 * fromIntegral p)) c = 0.75
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдВ рдкреНрд░рд╛рдЗрдо -рдЖрдЙрдЯ 5 рдХреЛ рдЧреНрд░реАрди рд╕реНрдХреНрд╡рд╛рдпрд░ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреНрд░рдореБрдЦ рдХрд╛рд░рдХреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реЛрдиреЗ рдкрд░, рд╣рдо рдкреБрдирд░рд╛рд╡рд░реНрддреА рд░реВрдк рд╕реЗ рд╕рдВрдкреВрд░реНрдг рдЫрд╡рд┐ рдмрдирд╛рддреЗ рд╣реИрдВред
рдпрджрд┐ рд╕реВрдЪреА рдЦрд╛рд▓реА рд╣реИ, рддреЛ рдпрд╣ рд╕рдВрдЦреНрдпрд╛ 1 рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╕рд┐рд░реНрдл рдПрдХ рдмреНрд▓реИрдХ рдбреЙрдЯ рдмрдирд╛рддреЗ рд╣реИрдВред
factorDiagram' :: [Integer] -> Diagram Cairo R2 factorDiagram' [] = circle 1 # fc black

рдЕрдиреНрдпрдерд╛, рдпрджрд┐ рдкрд╣рд▓реЗ рдЕрднрд╛рдЬреНрдп рд╕рдВрдЦреНрдпрд╛ рдХреЛ p рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдмрд╛рдХреА ps рд╣реИрдВ, рддреЛ рд╣рдо рдкреБрдирд░рд╛рд╡рд░реНрддреА рд╢реЗрд╖ ps рд╕реЗ рдПрдХ рдЫрд╡рд┐ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕ рдЫрд╡рд┐ рдХреА p рдкреНрд░рддрд┐рдпреЛрдВ рдХреЛ PrimeLayout рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рддреЗ рд╣реИрдВред
factorDiagram' (p:ps) = primeLayout p (factorDiagram' ps) # centerXY
рдФрд░ рдЕрдВрдд рдореЗрдВ, рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдПрдХ рдХрд╛рд░рдХ рдЪрд╛рд░реНрдЯ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрд╕реЗ рдкреНрд░рдореБрдЦ рдХрд╛рд░рдХреЛрдВ рдореЗрдВ рд╡рд┐рдШрдЯрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ primes рдХреА рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдХрд░рддреЗ рд╣реИрдВ, рдлреНрд▓рд┐рдк рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╣реЛ рдФрд░ рдлрд╝реИрдХреНрдЯрд░рдбрд╛рдИрдЧреНрд░рд╛рдо рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ 'ред
factorDiagram :: Integer -> Diagram Cairo R2 factorDiagram = factorDiagram' . reverse . concatMap (uncurry $ flip replicate) . factorise
рдФрд░ рд╡реЛрдЗрд▓рд╛! рдмреЗрд╢рдХ, рдпрд╣ рдХреЗрд╡рд▓ {2, 3, 5, 7} (рдФрд░ рд╢рд╛рдпрдж 11) рд░реЗрдВрдЬ рдореЗрдВ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ 121 рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:

рдФрд░ рдЗрд╕рд▓рд┐рдП 611:

рдпрд╣рд╛рдБ 1 рд╕реЗ 36 рддрдХ рд╕рднреА рдкреВрд░реНрдгрд╛рдВрдХреЛрдВ рдХреЗ рдЪрд╛рд░реНрдЯ рджрд┐рдП рдЧрдП рд╣реИрдВ:

рдЯреНрд░рд┐рдкрд▓ рдХреА рдбрд┐рдЧреНрд░реА рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХреЗ рдЖрд░реЗрдЦ
Sierpinski рддреНрд░рд┐рдХреЛрдг рд╣реИрдВ ред рдпрд╣рд╛рдБ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рей
рел = реирекрей:

рджреЛ рдХреА рдбрд┐рдЧреНрд░реА рднреА рдХрд╛рдлреА рдЕрдЪреНрдЫреА рд╣реИ, рд╡реЗ рдлреНрд░реИрдХреНрдЪрд░ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ
рдХреИрдВрдЯрд░ рдбрд╕реНрдЯ рдХрд╣рд╛ рдЬрд╛рддрд╛
рд╣реИ ред рдпрд╣рд╛рдБ 2
10 = 1024 рд╣реИ:

рдФрд░ рдЕрдВрдд рдореЗрдВ 104:

рджреНрд╡рд╛рд░рд╛ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛: рдмреНрд░реЗрдВрдЯ рдпреЙрд░реНрдЧреАред
рдореВрд▓ ред
рдкреБрдирд╢реНрдЪ: рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рд╣реИ (рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╡рд┐рдШрдЯрди рдХреЛ рдкреНрд░рдореБрдЦ рдХрд╛рд░рдХреЛрдВ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝рдХрд░), рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИред :)
рдореВрд▓ рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ, рд▓реЗрдЦрдХ рдХрд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рд╡рд╣ рдЖрд╡реЗрджрди рдХреЛ рдПрдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдХреЛрдИ рднреА рд╡реНрдпрдХреНрддрд┐ рдЕрдкрдирд╛ рдирдВрдмрд░ рджрд░реНрдЬ рдХрд░ рд╕рдХреЗ рдФрд░ рдкрд░рд┐рдгрд╛рдо рджреЗрдЦ рд╕рдХреЗред
рдореИрдВрдиреЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХреБрдЫ рдРрд╕рд╛ рд╣реА рдХрд┐рдпрд╛, рдЬреЛ рд▓реЛрдЧ
рдпрд╣рд╛рдВ рдкреНрд░рдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ
рд╣реИрдВ ред рдкреНрд░рджрд░реНрд╢рди рд╣реИрд╕реНрдХреЗрд▓ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдХрдо рд╣реИ, рдЗрд╕рд▓рд┐рдП рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдпрд╣ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд╣реИред
PPS: рд╕реИрдВрдбрдмреЙрдХреНрд╕ рд╕реЗ рдкреЛрд╕реНрдЯ рдХрд░реЗрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЕрдиреБрд╡рд╛рдж рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рдЙрдкрдпреБрдХреНрдд рддрд░реАрдХреЗ рд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдлреА рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
UPD: lany рдиреЗ рдПрдХ рд╕рдорд╛рди рдЪрд╛рд░реНрдЯ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝рд░ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рд╛рде рдПрдХ рдмрд╣реБрдд рд╣реА рджрд┐рд▓рдЪрд╕реНрдк
рд▓реЗрдЦ рд▓рд┐рдЦрд╛, рд▓реЗрдХрд┐рди рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЙрдЪреНрдЪ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд╕рд╛рдеред рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ 3628800 рдХрд╛ рдЕрдкрдШрдЯрди рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ? рдпрд╣рд╛рдБ рдЖрдк рдХреЗ рд▓рд┐рдПред :)