рдпрд╣ рдЖрдкрдХрд╛ рд╣рд╛рд╕реНрдХреЗрд▓ рдлреИрдХреНрдЯрд░рд┐рдпрд▓ (рдХреЗрд╡рд▓) рдФрд░ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реИ

рдЬрдм рдкрд╕рдВрджреАрджрд╛ рднрд╛рд╖рд╛рдУрдВ рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ, рддреЛ рдореИрдВ рдЖрдорддреМрд░ рдкрд░ рдХрд╣рддрд╛ рд╣реВрдВ рдХрд┐, рдЕрдиреНрдп рд╕рднреА рдЪреАрдЬреЗрдВ рд╕рдорд╛рди рд╣реИрдВ, рдореИрдВ рд╣рд░ рдЪреАрдЬ рдХреЗ рд▓рд┐рдП рдХреНрд░рд╢рд░ рдФрд░ рд╣рд╛рд╕реНрдХреЗрд▓ рдХреЗ рд▓рд┐рдП C ++ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВред рдпрд╣ рд╕рдордп-рд╕рдордп рдкрд░ рдЬрд╛рдВрдЪрдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд╡рд┐рднрд╛рдЬрди рдиреНрдпрд╛рдпрд╕рдВрдЧрдд рд╣реИ, рдФрд░ рдХреЗрд╡рд▓ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдПрдХ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдФрд░ рдмрд╣реБрдд рд╕рд░рд▓ рдкреНрд░рд╢реНрди рдЙрддреНрдкрдиреНрди рд╣реБрдЖ рд╣реИ: рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рднреА рд╡рд┐рднрд╛рдЬрдХреЛрдВ рдХрд╛ рдпреЛрдЧ рдЗрд╕ рдмрд┐рд▓ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реЗрдЧрд╛, рдХрд╣рддреЗ рд╣реИрдВ, рдкрд╣рд▓реЗ рдЕрд░рдм рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдПред рдЗрд╕ рдХрд╛рд░реНрдп рдХреЛ рдбрд░рд╛рдирд╛ рдЖрд╕рд╛рди рд╣реИ (рдЗрд╕реЗ рдкрд░рд┐рдгрд╛рдореА рд╕рдВрдЦреНрдпрд╛ рдХреА рдЪрдХреНрдХреА рдХрд╣рдирд╛ рд╢рд░реНрдо рдХреА рдмрд╛рдд рд╣реИ), рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЪреЗрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдврд╝рд┐рдпрд╛ рд╡рд┐рдХрд▓реНрдк рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред


рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореЗрд░реЗ рдкрд╛рд╕ рдЕрднреА рднреА рд╣рд╛рд╕реНрдХреЗрд▓ рдХреЛрдб рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреА рд╕рдЯреАрдХ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирдмреВрдЭрдХрд░ рдЦрд░рд╛рдм рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реИ рдХрд┐ рдкреНрд░рджрд░реНрд╢рди рдХреИрд╕реЗ рдХрдо рд╣реЛ рдЬрд╛рдПрдЧрд╛ред


рдареАрдХ рд╣реИ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рднрд╛рдЬрдХ рдХреЗ рд▓рд┐рдП рд▓рд▓рд╛рдЯ рдЦреЛрдЬ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рджрд┐рдЦрд╛ рд╕рдХрддреЗ рд╣реИрдВ 1 рдХреЛ рдП рдПрдирдПрди ред


рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо


рддреЛ, рдЪрд▓реЛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред


рдХрд┐рд╕реА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рднреА рд╡рд┐рднрд╛рдЬрдХреЛрдВ рдХрд╛ рдпреЛрдЧ рдХреИрд╕реЗ рдЬреНрдЮрд╛рдд рдХрд░реЗрдВ рдП рдПрдирдПрди ? рдЖрдк рд╕рднреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ k_1 \ in \ {1 \ dots \ lfloor \ sqrt n \ rfloor \}k_1 \ in \ {1 \ dots \ lfloor \ sqrt n \ rfloor \} рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╣рд░ рдХреЗ рд▓рд┐рдП k1 рд╢реЗрд╖ рднрд╛рдЧ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рдПрди рдкрд░ k1 ред рдпрджрд┐ рд╢реЗрд╖ рд╣реИ 0 , рдлрд┐рд░ рдмреИрдЯрд░реА рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ k1+k2 рдЬрд╣рд╛рдБ k2= fracnk1 рдЕрдЧрд░ k1 neqk2 , рдФрд░ рдмрд╕ k1 рдЕрдиреНрдпрдерд╛ред


рдХреНрдпрд╛ рдпрд╣ рдПрд▓реНрдЧреЛрд░рд┐рдердо рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдПрди рд╕рдордп, рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрдЦреНрдпрд╛ рд╕реЗ 1 рдХреЛ рдПрди ? рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХрдард┐рдирд╛рдИ рдХреНрдпрд╛ рд╣реЛрдЧреА? рдЙрд╕ рдЖрджреЗрд╢ рдХреЛ рджреЗрдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИ O(n frac32) рд╡рд┐рднрд╛рдЬрди - рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рд╣рдо рд╡рд┐рднрд╛рдЬрди рдХреА рдЬрдбрд╝ рдмрдирд╛рддреЗ рд╣реИрдВ, рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рдВрдЦреНрдпрд╛рдПрдБ рд╣реЛрддреА рд╣реИрдВ рдПрди ред рдХреНрдпрд╛ рд╣рдо рдмреЗрд╣рддрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд╣рд╛рдБред


рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкреНрд░рдпрд╛рд╕ рдмрд░реНрдмрд╛рдж рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╡рд┐рднрд╛рдЬрди рд╣рдореЗрдВ рд╕рдлрд▓рддрд╛ рдХреА рдУрд░ рдирд╣реАрдВ рд▓реЗ рдЬрд╛рддреЗ, рдПрдХ рдЧреИрд░-рдмрдЪреЗ рд╣реБрдП рд╡реНрдпрдХреНрддрд┐ рдХреЛ рджреЗ рджреЗрддреЗ рд╣реИрдВред рдпрд╣ рдереЛрдбрд╝рд╛ рдФрд░ рдЕрдзрд┐рдХ рдЖрд▓рд╕реА рд╣реЛрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рдФрд░ рджреВрд╕рд░реА рддрд░рдл рд╕реЗ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рд╣реИ: рдЪрд▓реЛ рдмрд╕ рднрд╛рдЬрдХ рдХреЗ рд▓рд┐рдП рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрдореНрдореАрджрд╡рд╛рд░реЛрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдХрд┐рд╕ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╕рдВрддреБрд╖реНрдЯ рд╣реИрдВ?


рддреЛ, рдЕрдм рд╣рдореЗрдВ рдПрдХ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рдЭрдкрдЯреНрдЯрд╛ рдорд╛рд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ 1 рдХреЛ рдПрди рдЗрд╕рдХреЗ рд╕рднреА рднрд╛рдЬрдХ рдХреЗ рдпреЛрдЧ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рднреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдирд╛ k_1 \ in \ {1 \ dots \ lfloor \ sqrt n \ rfloor \} , рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдРрд╕реЗ рдХреЗ рд▓рд┐рдП k1 рдЪрд▓реЛ рд╕рдм рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рддреЗ рд╣реИрдВ k_2 \ in \ {k_1 \ dots \ lfloor \ frac {n} {k} \ rflot \} ред рдкреНрд░рддреНрдпреЗрдХ рдЬреЛрдбрд╝реА рдХреЗ рд▓рд┐рдП (k1,k2) рд╕реВрдЪрдХрд╛рдВрдХ рдХреЗ рд╕рд╛рде рд╕реЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ k1 cdotk2 рдЕрд░реНрде k1+k2 рдЕрдЧрд░ k1 neqk2 , рдФрд░ k1 рдЕрдиреНрдпрдерд╛ред


рдпрд╣ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдмрд┐рд▓реНрдХреБрд▓ рдХрд░рддрд╛ рд╣реИ n frac12 рд╡рд┐рднрд╛рдЬрди, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдЧреБрдгрд╛ (рдЬреЛ рд╡рд┐рднрд╛рдЬрди рд╕реЗ рд╕рд╕реНрддрд╛ рд╣реИ) рд╣рдореЗрдВ рд╕рдлрд▓рддрд╛ рдХреА рдУрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ: рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░ рд╣рдо рдХреБрдЫ рдмрдврд╝рд╛рддреЗ рд╣реИрдВред рдпрд╣ рд▓рд▓рд╛рдЯ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡реА рд╣реИред


рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдПрдХ рд╣реА рд▓рд▓рд╛рдЯ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реЛрдиреЗ рдкрд░, рдЖрдк рджреЛрдиреЛрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рддреБрд▓рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдХрд╛рдлреА рдХрдо рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдкрд░рд┐рдгрд╛рдо рджреЗрддреЗ рд╣реИрдВ, рдЬреЛ рдереЛрдбрд╝рд╛ рдЖрддреНрдорд╡рд┐рд╢реНрд╡рд╛рд╕ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдПред


рдкрд╣рд▓рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


рдФрд░ рд╡реИрд╕реЗ, рдпрд╣ рд╕реАрдзреЗ рд╣рд╛рд╕реНрдХреЗрд▓ рдореЗрдВ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдПрдХ рдЫрджреНрдо рдХреЛрдб рд╣реИ:


module Divisors.Multi(divisorSums) where import Data.IntMap.Strict as IM divisorSums :: Int -> Int divisorSums n = IM.fromListWith (+) premap IM.! n where premap = [ (k1 * k2, if k1 /= k2 then k1 + k2 else k1) | k1 <- [ 1 .. floor $ sqrt $ fromIntegral n ] , k2 <- [ k1 .. n `quot` k1 ] ] 

Main рдореЙрдбреНрдпреВрд▓ рд╕рд░рд▓ рд╣реИ, рдФрд░ рдореИрдВ рдЗрд╕реЗ рдирд╣реАрдВ рд▓рд╛рддрд╛ред


рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣рд╛рдВ рд╣рдо рдХреЗрд╡рд▓ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд░рд╛рд╢рд┐ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдПрди рдЕрдиреНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдореЗрдВ рдЖрд╕рд╛рдиреА рдХреЗ рд▓рд┐рдПред рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рд╣рд╛рд╕реНрдХреЗрд▓ рдПрдХ рдЖрд▓рд╕реА рднрд╛рд╖рд╛ рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рднреА рд░рд╛рд╢рд┐рдпреЛрдВ рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рдПрдЧреА (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рдФрдЪрд┐рддреНрдп рдЗрд╕ рд▓реЗрдЦ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдкрд░реЗ рд╣реИ), рдЗрд╕рд▓рд┐рдП рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣рдордиреЗ рдЕрдирдЬрд╛рдиреЗ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЧрд┐рдирд╛ред


рдпрд╣ рдХрд┐рддрдиреА рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ? рдореЗрд░реЗ i7 3930k рдкрд░, рдПрдХ рдзрд╛рд░рд╛ рдореЗрдВ, 100,000 рддрддреНрд╡ 0.4 s рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЧрдгрдирд╛ рдкрд░ 0.15 рд╕реЗрдХреЗрдВрдб рдФрд░ рдЬреАрд╕реА рдкрд░ 0.25 рдПрд╕ рдЦрд░реНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рд╣рдо рд▓рдЧрднрдЧ 8 рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рдореЗрдореЛрд░реА рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд▓реЗрддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬрдм рд╕реЗ рдЗрдВрдЯ рдХрд╛ рдЖрдХрд╛рд░ 8 рдмрд╛рдЗрдЯреНрд╕ рд╣реИ, рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 800 рдХрд┐рд▓реЛрдмрд╛рдЗрдЯреНрд╕ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред


рдЕрдЪреНрдЫрд╛ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ)ред рдмрдврд╝рддреА, рдЙрдо, рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдпреЗ рд╕рдВрдЦреНрдпрд╛ рдХреИрд╕реЗ рдмрдврд╝реЗрдЧреА? 1'000'000 рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд▓рдЧрднрдЧ 7.5 рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдкрд░ рддреАрди рд╕реЗрдХрдВрдб рдФрд░ рдЬреАрд╕реА рдкрд░ 4.5 рд╕реЗрдХрдВрдб рдЦрд░реНрдЪ рдХрд░ рд░рд╣рд╛ рд╣реИ, рд╕рд╛рде рд╣реА 80 рдореЗрдЧрд╛рдмрд╛рдЗрдЯ (рдЖрд╡рд╢реНрдпрдХ рд╕реЗ 10 рдЧреБрдирд╛ рдЕрдзрд┐рдХ) рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИред рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рд╣рдо рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд▓рд┐рдП рд╡рд░рд┐рд╖реНрда рдЬрд╛рд╡рд╛ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╣реЛрдиреЗ рдХрд╛ рджрд┐рдЦрд╛рд╡рд╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЬреАрд╕реА рдЯреНрдпреВрдирд┐рдВрдЧ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рддрд╕реНрд╡реАрд░ рдХреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдмрджрд▓реЗрдВрдЧреЗред рдмрд╣реБрдд рдмреБрд░рд╛ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХрднреА рднреА рдПрдХ рдЕрд░рдм рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рд╣рдо рдпрд╛ рддреЛ рд╕реНрдореГрддрд┐ рдореЗрдВ рдирд╣реАрдВ рдЖрддреЗ рд╣реИрдВ: рдореЗрд░реА рдорд╢реАрди рдкрд░ рдХреЗрд╡рд▓ 64 рдЧреАрдЧрд╛рдмрд╛рдЗрдЯ рд░реИрдо рд╣реИ, рдФрд░ рдпрджрд┐ рд░реБрдЭрд╛рди рдЬрд╛рд░реА рд░рд╣рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдореЗрдВ рд▓рдЧрднрдЧ 80 рдХрд╛ рд╕рдордп рд▓рдЧреЗрдЧрд╛ред


рдРрд╕рд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ


C ++ рд╡рд┐рдХрд▓реНрдк


рдЖрдЗрдП рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдкреНрд▓рд╕рд╕ рдкрд░ рдХреЛрдб рд▓рд┐рдЦреЗрдВрдЧреЗред


рдЦреИрд░, рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдбреАрдмрдЧреНрдб рдПрд▓реНрдЧреЛрд░рд┐рдердо рд╣реИ, рддреЛ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ:


 #include <vector> #include <string> #include <cmath> #include <iostream> int main(int argc, char **argv) { if (argc != 2) { std::cerr << "Usage: " << argv[0] << " maxN" << std::endl; return 1; } int64_t n = std::stoi(argv[1]); std::vector<int64_t> arr; arr.resize(n + 1); for (int64_t k1 = 1; k1 <= static_cast<int64_t>(std::sqrt(n)); ++k1) { for (int64_t k2 = k1; k2 <= n / k1; ++k2) { auto val = k1 != k2 ? k1 + k2 : k1; arr[k1 * k2] += val; } } std::cout << arr.back() << std::endl; } 

рдпрджрд┐ рдЖрдк рдЕрдЪрд╛рдирдХ рдЗрд╕ рдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ

рдХрдВрдкрд╛рдЗрд▓рд░ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рдорд╣рд╛рди рд▓реВрдк-рдЗрдирд╡реЗрд░рд┐рдПрдВрдЯ рдХреЛрдб рдореЛрд╢рди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рдЬреАрд╡рди рдореЗрдВ рдПрдХ рдмрд╛рд░ рд░реВрдЯ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдмрд╛рд╣рд░реА рд▓реВрдк рдХреЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рдЕрдиреБрд╕рд╛рд░ n / k1 рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИред


рдФрд░ рд╕рд╛рджрдЧреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдмрд┐рдЧрд╛рдбрд╝рдиреЗ рд╡рд╛рд▓рд╛

рдЗрд╕ рдХреЛрдб рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдкрд╣рд▓реА рдмрд╛рд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛, рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдореИрдВрдиреЗ рдПрдХ рдореМрдЬреВрджрд╛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреА рдирдХрд▓ рдХреАред рдореИрдВрдиреЗ рдмрд╣реБрдд рд╣реА рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рдЧрд▓рддрд┐рдпрд╛рдБ рдХреА рд╣реИрдВ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реАрдзреЗ рддреМрд░ рдкрд░ рдкреНрд░рдХрд╛рд░реЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рд╡реЗ рдмрдиреЗ рд╣реБрдП рдереЗред рд▓реЗрдХрд┐рди рдпрд╣ рд╣реИ, рд╡рд┐рдЪрд╛рд░ рдЬреЛрд░ рд╕реЗред


-O3 -march=native , -O3 -march=native 8, рдПрдХ рд▓рд╛рдЦ рддрддреНрд╡реЛрдВ рдХреЛ 0.024 рдПрд╕ рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЖрд╡рдВрдЯрд┐рдд 8 рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рдореЗрдореЛрд░реА рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ -O3 -march=native ред рдмрд┐рд▓рд┐рдпрди - 155 рд╕реЗрдХрдВрдб, 8 рдЧреАрдЧрд╛рдмрд╛рдЗрдЯ рдореЗрдореЛрд░реА, рдЬреИрд╕рд╛ рдХрд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рдерд╛ред рдУрд╣ред рд╣рд╛рд╕реНрдХреЗрд▓ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИред рд╣рд╛рд╕реНрдХреЗрд▓ рдХреЛ рдмрд╛рд╣рд░ рдлреЗрдВрдХрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕ рдкрд░ рдХреЗрд╡рд▓ factorials рдФрд░ prepromorphisms рдФрд░ рд▓рд┐рдЦрддреЗ рд╣реИрдВ! рдпрд╛ рдирд╣реАрдВ?


рджреВрд╕рд░рд╛ рд╡рд┐рдХрд▓реНрдк


рдЬрд╛рд╣рд┐рд░ рд╣реИ, IntMap рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рднреА рдЙрддреНрдкрдиреНрди рдЖрдВрдХрдбрд╝реЛрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, IntMap , рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдХ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕рд╛рдзрд╛рд░рдг рдирдХреНрд╢рд╛ - рдЗрд╕реЗ рд╣рд▓реНрдХреЗ рдврдВрдЧ рд╕реЗ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдмрд╕реЗ рдмреБрджреНрдзрд┐рдорд╛рди рдирд┐рд░реНрдгрдп рдирд╣реАрдВ рд╣реИ (рд╣рд╛рдБ, рдпрд╣ рд╡рд╣реА рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдШрдЯрд┐рдпрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИ рдЬреЛ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛)ред рд╣рдо C ++ рдХреЛрдб рдХреА рддрд░рд╣ рдПрдХ рд╕рд░рдгреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ?


рдЖрдЗрдП рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ:


 module Divisors.Multi(divisorSums) where import qualified Data.Array.IArray as A import qualified Data.Array.Unboxed as A divisorSums :: Int -> Int divisorSums n = arr A.! n where arr = A.accumArray (+) 0 (1, n) premap :: A.UArray Int Int premap = [ (k1 * k2, if k1 /= k2 then k1 + k2 else k1) | k1 <- [ 1 .. floor bound ] , k2 <- [ k1 .. n `quot` k1 ] ] bound = sqrt $ fromIntegral n :: Double 

рдпрд╣рд╛рдВ рд╣рдо рддреБрд░рдВрдд рд╕рд░рдгреА рдХреЗ рдЕрдирдмреЙрдХреНрд╕ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЪреВрдВрдХрд┐ Int рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ, рдФрд░ рд╣рдореЗрдВ рдЗрд╕рдореЗрдВ рдЖрд▓рд╕реНрдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдмреЙрдХреНрд╕рд┐рдВрдЧ рд╕рдВрд╕реНрдХрд░рдг рдХреЗрд╡рд▓ arr рдкреНрд░рдХрд╛рд░ рдореЗрдВ рднрд┐рдиреНрди рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╣рдо рдореБрд╣рд╛рд╡рд░реЗ рдореЗрдВ рднреА рдирд╣реАрдВ рдЦреЛрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдмрд╛рдзреНрдп рдХреЗ рд▓рд┐рдП рдмрдВрдзрди рдпрд╣рд╛рдВ рдЕрд▓рдЧ рд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рд▓рд┐рдП рдирд╣реАрдВ рдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рдмреЗрд╡рдХреВрдл рд╣реИ рдФрд░ рдПрд▓рдЖрдИрд╕реАрдПрдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрдпреЛрдВрдХрд┐ рддрдм рдЖрдк рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╕рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ floor рддрд░реНрдХ рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрдХрд▓рдХ рд╕реЗ рдЪреЗрддрд╛рд╡рдиреА рд╕реЗ рдмрдЪ рд╕рдХрддреЗ рд╣реИрдВред


рдПрдХ рд▓рд╛рдЦ рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП реж.режрекрел рдПрд╕ (рдХреЗрд╡рд▓ рдкреНрд▓рд╕рд╕ рд╕реЗ рджреЛ рдЧреБрдирд╛ рдмрджрддрд░!)ред рдореЗрдореЛрд░реА рдХреЗ 8 рдореЗрдЧрд╛рдмрд╛рдЗрдЯ, рдЬреАрд╕реА (!) рдореЗрдВ рд╢реВрдиреНрдп рдорд┐рд▓реАрд╕реЗрдХрдВрдбред рдмрдбрд╝реЗ рдЖрдХрд╛рд░ рдореЗрдВ, рдкреНрд░рд╡реГрддреНрддрд┐ рдмрдиреА рд░рд╣рддреА рд╣реИ - C ++ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд▓рдЧрднрдЧ рджреЛ рдЧреБрдирд╛ рдзреАрдореА, рдФрд░ рд╕рдорд╛рди рдорд╛рддреНрд░рд╛ рдореЗрдВ рдореЗрдореЛрд░реАред рдорд╣рд╛рди рдкрд░рд┐рдгрд╛рдо! рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣рдо рдмреЗрд╣рддрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?


рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд╣рд╛рдБред accumArray рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд╣рдореЗрдВ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ - рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рд╕реВрдЪрдХрд╛рдВрдХ рд╕рд╣реА рд╣реИрдВред рдЪрд▓реЛ рдХреЙрд▓ рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред


 module Divisors.Multi(divisorSums) where import qualified Data.Array.Base as A import qualified Data.Array.IArray as A import qualified Data.Array.Unboxed as A divisorSums :: Int -> Int divisorSums n = arr A.! (n - 1) where arr = A.unsafeAccumArray (+) 0 (0, n - 1) premap :: A.UArray Int Int premap = [ (k1 * k2 - 1, if k1 /= k2 then k1 + k2 else k1) | k1 <- [ 1 .. floor bound ] , k2 <- [ k1 .. n `quot` k1 ] ] bound = sqrt $ fromIntegral n :: Double 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЦрд░реЛрдВрдЪ рд╕реЗ рдЕрдиреБрдХреНрд░рдорд┐рдд рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдкрд░рд┐рд╡рд░реНрддрди рдиреНрдпреВрдирддрдо рд╣реИрдВ (рдЬреЛ, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдкреБрд╕реНрддрдХрд╛рд▓рдп рдПрдкреАрдЖрдИ рдореЗрдВ рдПрдХ рдмрдЧ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдФрд░ рд╕рд╡рд╛рд▓ рд╣реИ)ред рдкреНрд░рджрд░реНрд╢рди рдХреНрдпрд╛ рд╣реИ?


рдПрдХ рд▓рд╛рдЦ рддрддреНрд╡ - 0.021 рдПрд╕ (рд╡рд╛рд╣, рддреНрд░реБрдЯрд┐ рдХреЗ рдорд╛рд░реНрдЬрд┐рди рдХреЗ рднреАрддрд░, рд▓реЗрдХрд┐рди рдкреЗрд╢реЗрд╡рд░реЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬ!)ред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдореЗрдореЛрд░реА рдХреЗ рд╕рдорд╛рди 8 рдореЗрдЧрд╛рдмрд╛рдЗрдЯ, рдЬреАрд╕реА рдореЗрдВ рд╡рд╣реА 0 рдПрдордПрд╕ред


рдЕрд░рдм рддрддреНрд╡ - 152 рдПрд╕ (рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд▓рд╕рд╕ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬ рд╣реИ!)ред 8 рдЧреАрдЧрд╛рдмрд╛рдЗрдЯ рд╕реЗ рдереЛрдбрд╝рд╛ рдХрдоред рдЬреАрд╕реА рдореЗрдВ 0 рдПрдордПрд╕ред рдХреЛрдб рдЕрднреА рднреА рдореБрд╣рд╛рд╡рд░реЗрджрд╛рд░ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдПрдХ рдЬреАрдд рд╣реИред


рдирд┐рд╖реНрдХрд░реНрд╖ рдореЗрдВ


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рдерд╛ рдХрд┐ рдПрдХ unsafe рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде accumArray рдХреЛ рдмрджрд▓рдиреЗ рд╕реЗ рдЗрд╕ рддрд░рд╣ рдХреА рд╡реГрджреНрдзрд┐ рд╣реЛрдЧреАред 10-20 рдкреНрд░рддрд┐рд╢рдд рдХреА рдЙрдореНрдореАрдж рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдЙрдЪрд┐рдд рд╣реЛрдЧрд╛ (рдЖрдЦрд┐рд░рдХрд╛рд░, рдкреНрд▓рд╕рд╕ рдореЗрдВ, operator[] рдЬрдЧрд╣ operator[] рд╕рд╛рде at() рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рдХрдореА рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ), рд▓реЗрдХрд┐рди рдЖрдзреЗ рд╕реЗ рдирд╣реАрдВ!


рджреВрд╕рд░реА рдмрд╛рдд, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ рдПрдХ рдкрд░рд╕реНрдкрд░ рдЪрд┐рдкрдХреЗ рд╣реБрдП рдмрд┐рдирд╛ рдПрдХ рдмрд╣реБрдд рд╣реА рдЕрдЪреНрдЫрд╛ рд╕реНрд╡рдЪреНрдЫ рдХреЛрдб рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдЗрд╕ рд╕реНрддрд░ рддрдХ рдкрд╣реБрдБрдЪрддрд╛ рд╣реИред


рддреАрд╕рд░рд╛, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЖрдЧреЗ рдХреЗ рдЕрдиреБрдХреВрд▓рди рд╕рдВрднрд╡ рд╣реИрдВ, рдФрд░ рд╕рднреА рд╕реНрддрд░реЛрдВ рдкрд░ред рдореБрдЭреЗ рдпрдХреАрди рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдкреНрд▓рд╕рд╕ рдкрд░ рдХреЛрдб рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдирд┐рдЪреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдРрд╕реЗ рд╕рднреА рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдореЗрдВ, рдкреНрд░рдпрд╛рд╕ рдХреЗ рдмреАрдЪ рд╕рдВрддреБрд▓рди (рдФрд░ рдХреЛрдб рдХреА рдорд╛рддреНрд░рд╛) рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдирд┐рдХрд╛рд╕ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдЕрдиреНрдпрдерд╛, рд╕рдм рдХреБрдЫ рдЕрдВрддрддрдГ рдПрд▓рдПрд▓рд╡реАрдПрдо рдЬреЗрдЖрдИрдЯреА рдХреА рдЪреБрдиреМрддреА рдпрд╛ рдХреБрдЫ рдЗрд╕реА рддрд░рд╣ рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдкреНрд░рд╕реНрддреБрдд рдПрдХ рдЫреЛрдЯреА рд╕реЛрдЪ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рдЫреЛрдЯреЗ рд╕реЗ рд░рд╡рд┐рд╡рд╛рд░ рдХреЗ рд╕рд╛рд╣рд╕рд┐рдХ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рднреА рдХрд╛рдо рдХрд░реЗрдЧрд╛ред


рдЪреМрдерд╛, рдореЗрд░рд╛ рдкрд╕рдВрджреАрджрд╛: рдкреНрд░рдХрд╛рд░ рдкреНрд░рдгрд╛рд▓реА рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред unsafe рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИ, рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд░реВрдк рдореЗрдВ рдореИрдВ рд╕рд╛рдмрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдБ рдХрд┐ k_1 * k_2 <= n рд╕рднреА k_1, k_2 рд▓реВрдк рдореЗрдВ рд╣реИред рднрд░реЛрд╕реЗрдордВрдж рд░реВрдк рд╕реЗ рдЯрд╛рдЗрдк рдХреА рдЧрдИ рднрд╛рд╖рд╛рдУрдВ рдХреА рдПрдХ рдЖрджрд░реНрд╢ рджреБрдирд┐рдпрд╛ рдореЗрдВ, рдореИрдВ рдЗрд╕ рдкреНрд░рдорд╛рдг рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рд░реВрдк рд╕реЗ рдХрд░реВрдВрдЧрд╛ рдФрд░ рдЗрд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкрд╛рд╕ рдХрд░реВрдВрдЧрд╛, рдЬреЛ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдЪреЗрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд╣рдЯрд╛ рджреЗрдЧрд╛ред рд▓реЗрдХрд┐рди, рдЕрдлрд╕реЛрд╕, рд╣рд╛рд╕реНрдХреЗрд▓ рдореЗрдВ рдкреВрд░реНрдг-рдЬрд╛рд╡рд┐рддрд┐рдкреЛрд╡ рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдЙрди рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЬрд╣рд╛рдВ рдЬрд╛рд╡рд┐рддрд┐рдкрд┐ рд╣реИрдВ (рдФрд░ рдЬреЛ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ), рдХреЛрдИ array рдФрд░ рдПрдирд╛рд▓реЙрдЧ рдирд╣реАрдВ рд╣реИрдВред


рдкрд╛рдВрдЪрд╡реАрдВ, рдореИрдВ рдЕрдиреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреЛ рдЗрди рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдкрд╛рд╕-рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреЗ рд▓рд┐рдП рдЕрд░реНрд╣рддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рдЬрд╛рдирддрд╛, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдПрдХ рдорд┐рддреНрд░ рдиреЗ рдЕрдЬрдЧрд░ рдореЗрдВ рдПрдХ рдПрдирд╛рд▓реЙрдЧ рд▓рд┐рдЦрд╛ рдерд╛ред рд▓рдЧрднрдЧ рдареАрдХ рд╕реМ рдмрд╛рд░ рдзреАрдорд╛, рдФрд░ рд╕реНрдореГрддрд┐ рд╕реЗ рднреА рдмрджрддрд░ред рдФрд░ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдмреЗрд╣рдж рд╕рд░рд▓ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдХреЛрдИ рдЬрд╛рдирдХрд╛рд░ рдЧреЛ, рд░рд╕реНрдЯ, рдЬреВрд▓рд┐рдпрд╛, рдбреА, рдЬрд╛рд╡рд╛, рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдПрдХ рдПрдирд╛рд▓реЙрдЧ рдпрд╛ рдХреБрдЫ рдФрд░ рд▓рд┐рдЦрддрд╛ рд╣реИ рдФрд░ рдПрдХ рддреБрд▓рдирд╛ рд╕рд╛рдЭрд╛ рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реА ++ рдХреЗ рд╕рд╛рде - рдЙрдирдХреЗ рдорд╢реАрди рдкрд░ рдХреЛрдб - рдпрд╣ рд╢рд╛рдпрдж рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ ред


рдкреБрдирд╢реНрдЪ: рдереЛрдбрд╝рд╛ clickbait рд╣реЗрдбрд░ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдХрд░реЗрдВред рдореИрдВ рдХреБрдЫ рднреА рдмреЗрд╣рддрд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдерд╛ред

Source: https://habr.com/ru/post/hi445134/


All Articles