рдПрдмреАрд╕реА рдкрд░рд┐рдХрд▓реНрдкрдирд╛ рдХрд╛ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рд╕рддреНрдпрд╛рдкрди (рд╣рд╛рдБ, рдпрд╣ рдПрдХ)

рд╣рд╛рдп, рд╣реИрдмреНрд░ред

Geektimes Habr (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 2013 рдФрд░ 2018 рдореЗрдВ ) рдкрд░ abc рдкрд░рд┐рдХрд▓реНрдкрдирд╛ рдкрд░ рдкрд╣рд▓реЗ рд╣реА рдХрдИ рд▓реЗрдЦ рдЖ рдЪреБрдХреЗ рд╣реИрдВред рдПрдХ рдкреНрд░рдореЗрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╣рд╛рдиреА рдЬреЛ рдкрд╣рд▓реЗ рдХрдИ рд╡рд░реНрд╖реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдмрд┐рдд рдирд╣реАрдВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рдФрд░ рдлрд┐рд░ рдПрдХ рд╣реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡рд░реНрд╖реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рддреНрдпрд╛рдкрд┐рдд рдирд╣реАрдВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдлреАрдЪрд░ рдлрд┐рд▓реНрдо рдХреА рд╣рдХрджрд╛рд░ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕ рдЕрджреНрднреБрдд рдХрд╣рд╛рдиреА рдХреА рдЫрд╛рдпрд╛ рдореЗрдВ, рдкреНрд░рдореЗрдп рдХреЛ рдмрд╣реБрдд рд╣реА рд╕рддрд╣реА рд░реВрдк рд╕реЗ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдХрдо рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реИред рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрдо рд╕реЗ рдХрдо рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдПрдмреАрд╕реА рдкрд░рд┐рдХрд▓реНрдкрдирд╛ рдЖрдзреБрдирд┐рдХ рд╡рд┐рдЬреНрдЮрд╛рди рдХреА рдХреБрдЫ рдЕрдирд╕реБрд▓рдЭреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдмрдпрд╛рди рдЬреЛ рдПрдХ рдкрд╛рдВрдЪрд╡реЗрдВ рдЧреНрд░реЗрдбрд░ рдХреЛ рднреА рд╕рдордЭ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдкрд░рд┐рдХрд▓реНрдкрдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдЪ рд╣реИ, рддреЛ рдпрд╣ рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрдиреНрдп рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рдореЗрдпреЛрдВ рдХреЗ рдкреНрд░рдорд╛рдг рд╕реЗ рдЕрдиреБрд╕рд░рдг рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдлрд░реНрдореЗрдЯ рдХреЗ рдкреНрд░рдореЗрдп рдХрд╛ рдкреНрд░рдорд╛рдгред

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

рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗ, рдХреГрдкрдпрд╛ рдХреНрдпрд╛ рд╣реБрдЖ, рдХреМрди рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИред

рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдмрдпрд╛рди


рд╢реБрд░реВ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдкреНрд░рдореЗрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╣реИ? рдЬреИрд╕рд╛ рдХрд┐ рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдХрд╣рддрд╛ рд╣реИ (рдЕрдВрдЧреНрд░реЗрдЬреА рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╢рдмреНрджрд╛рдВрдХрди рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд╣реИ), рдкрд╛рд░рд╕реНрдкрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЕрднрд╛рдЬреНрдп (рд╕рд╛рдорд╛рдиреНрдп рднрд╛рдЬрдХ рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░) рд╕рдВрдЦреНрдпрд╛ a, b рдФрд░ c рдРрд╕реА рд╣реИ рдХрд┐ a + b = c, рдХрд┐рд╕реА рднреА 0> 0 рдХреЗ рд▓рд┐рдП рд╕реАрдорд┐рдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ triples рд╣реИ a + b = c, рдРрд╕реЗ:



рд░реЗрдб рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд░реЗрдбрд┐рдХрд▓ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдХрд┐рд╕реА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдкреНрд░рдореБрдЦ рдХрд╛рд░рдХреЛрдВ рдХреЗ рдЙрддреНрдкрд╛рдж рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд░реЗрдб (16) = рд░реЗрдб (2 * 2 * 2 * 2) = 2, рд░реЗрдб (17) = 17 (17 рдПрдХ рдкреНрд░рд╛рдЗрдо), рд░реЗрдб (18) = рд░реЗрдб (2 * 3 * 3) = 2 * 3 = 6, рд░реЗрдб (1,000,000) = рд░реЗрдб (2 ^ 6 6 5 ^ 6) = 2 * 5 = 10ред

рджрд░рдЕрд╕рд▓, рдкреНрд░рдореЗрдп рдХрд╛ рд╕рд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдРрд╕реЗ рддреНрд░рд┐рдЧреБрдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрд╛рдлреА рдХрдо рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╣рдо рдпрд╛рджреГрдЪреНрдЫрд┐рдХ ╬╡ = 0.2 рдФрд░ рд╕рдорд╛рдирддрд╛ 100 + 27 = 127: рд░реЗрдб (100) = рд░реЗрдб (2 * 2 * 5 * 5) = 10, рд░реЗрдб (27) = рд░реЗрдб (3 * 3 * 3) = 3 рд▓реЗрддреЗ рд╣реИрдВ, rad (127) = 127, rad (a * b * c) = rad (a) * rad (b) * rad (c) = 3810, 3810 ^ 1.2 рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ 127 рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ, рдЕрд╕рдорд╛рдирддрд╛ рдзрд╛рд░рдг рдирд╣реАрдВ рдХрд░рддреА рд╣реИред рд▓реЗрдХрд┐рди рдЕрдкрд╡рд╛рдж рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдорд╛рдирддрд╛ 49 + 576 = 625 рдХреЗ рд▓рд┐рдП, рдкреНрд░рдореЗрдп рдХреА рд╢рд░реНрдд рдкреВрд░реА рд╣реЛрддреА рд╣реИ (рдЬреЛ рд▓реЛрдЧ рдЕрдкрдиреЗ рджрдо рдкрд░ рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред

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

рддреЛ рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред

рд╕реНрд░реЛрдд рдХреЛрдб


рдкрд╣рд▓рд╛ рд╕рдВрд╕реНрдХрд░рдг рдкрд╛рдпрдерди рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рднрд╛рд╖рд╛ рдРрд╕реА рдЧрдгрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдзреАрдореА рд╣реИ, рдЗрд╕ рдкрд░ рдХреЛрдб рд▓рд┐рдЦрдирд╛ рдЖрд╕рд╛рди рдФрд░ рд╕рд░рд▓ рд╣реИ, рдЬреЛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред

рд░реЗрдбрд┐рдХрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ : рд╣рдо рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдкреНрд░рдореБрдЦ рдХрд╛рд░рдХреЛрдВ рдореЗрдВ рд╡рд┐рдШрдЯрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реИрдВ, рд╕рд░рдгреА рдХреЛ рдПрдХ рд╕реЗрдЯ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдлрд┐рд░ рдмрд╕ рд╕рднреА рддрддреНрд╡реЛрдВ рдХрд╛ рдЙрддреНрдкрд╛рдж рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред

def prime_factors(n): factors = [] # Print the number of two's that divide n while n % 2 == 0: factors.append(int(2)) n = n / 2 # n must be odd at this point so a skip of 2 ( i = i + 2) can be used for i in range(3, int(math.sqrt(n)) + 1, 2): # while i divides n , print i ad divide n while n % i == 0: factors.append(int(i)) n = n / i # Condition if n is a prime number greater than 2 if n > 2: factors.append(int(n)) return set(factors) def rad(n): result = 1 for num in prime_factors(n): result *= num return result 

рдкрд╛рд░рд╕реНрдкрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЕрднрд╛рдЬреНрдп рд╕рдВрдЦреНрдпрд╛рдПрдБ : рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рдЧреБрдгрдирдЦрдВрдб, рдФрд░ рдХреЗрд╡рд▓ рд╕рдореБрдЪреНрдЪрдпреЛрдВ рдХреЗ рдкреНрд░рддрд┐рдЪреНрдЫреЗрджрди рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред

 def not_mutual_primes(a,b,c): fa, fb, fc = prime_factors(a), prime_factors(b), prime_factors(c) return len(fa.intersection(fb)) == 0 and len(fa.intersection(fc)) == 0 and len(fb.intersection(fc)) == 0 

рдЬрд╛рдВрдЪреЗрдВ : рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрдирд╛рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИред

 def check(a,b,c): S = 1.2 # Eps=0.2 if c > (rad(a)*rad(b)*rad(c))**S and not_mutual_primes(a, b, c): print("{} + {} = {} - PASSED".format(a, b, c)) else: print("{} + {} = {} - FAILED".format(a, b, c)) check(10, 17, 27) check(49, 576, 625) 

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

рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг рдХреЛ C ++ рдореЗрдВ рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдФрд░ рдХреБрдЫ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ (рдЗрдВрдЯрд░рд╕реЗрдХреНрдЯрд┐рдВрдЧ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рд╕реА рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рдмрд╣реБрдд рдХрдЯреНрдЯрд░ рд╣реЛрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╢рд╛рдпрдж рддреЗрдЬ рд╣реИ)ред рд╕реНрд░реЛрдд рдХреЛрдб рд╕реНрдкреЙрдЗрд▓рд░ рдХреЗ рдиреАрдЪреЗ рд╣реИ, рдЗрд╕реЗ рдореБрдлреНрдд рдЬреА ++ рд╕рдВрдХрд▓рдХ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреЛрдб рд╡рд┐рдВрдбреЛрдЬ, рдУрдПрд╕рдПрдХреНрд╕ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдХреЗ рддрд╣рдд рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

C ++ рдХреЛрдб
 // To compile: g++ abc.cpp -O3 -fopenmp -oabc #include <string.h> #include <math.h> #include <stdbool.h> #include <stdint.h> #include <stdio.h> #include <vector> #include <set> #include <map> #include <algorithm> #include <time.h> typedef unsigned long int valType; typedef std::vector<valType> valList; typedef std::set<valType> valSet; typedef valList::iterator valListIterator; std::vector<valList> valFactors; std::vector<double> valRads; valList factors(valType n) { valList results; valType z = 2; while (z * z <= n) { if (n % z == 0) { results.push_back(z); n /= z; } else { z++; } } if (n > 1) { results.push_back(n); } return results; } valList unique_factors(valType n) { valList results = factors(n); valSet vs(results.begin(), results.end()); valList unique(vs.begin(), vs.end()); std::sort(unique.begin(), unique.end()); return unique; } double rad(valType n) { valList f = valFactors[n]; double result = 1; for (valListIterator it=f.begin(); it<f.end(); it++) { result *= *it; } return result; } bool not_mutual_primes(valType a, valType b, valType c) { valList res1 = valFactors[a], res2 = valFactors[b], res3; // = valFactors[c]; valList c12, c13, c23; set_intersection(res1.begin(),res1.end(), res2.begin(),res2.end(), back_inserter(c12)); if (c12.size() != 0) return false; res3 = valFactors[c]; set_intersection(res1.begin(),res1.end(), res3.begin(),res3.end(), back_inserter(c13)); if (c13.size() != 0) return false; set_intersection(res2.begin(),res2.end(), res3.begin(),res3.end(), back_inserter(c23)); return c23.size() == 0; } int main() { time_t start_t, end_t; time(&start_t); int cnt=0; double S = 1.2; valType N_MAX = 10000000; printf("Getting prime factors...\n"); valFactors.resize(2*N_MAX+2); valRads.resize(2*N_MAX+2); for(valType val=1; val<=2*N_MAX+1; val++) { valFactors[val] = unique_factors(val); valRads[val] = rad(val); } time(&end_t); printf("Done, T = %.2fs\n", difftime(end_t, start_t)); printf("Calculating...\n"); #pragma omp parallel for reduction(+:cnt) for(int a=1; a<=N_MAX; a++) { for(int b=a; b<=N_MAX; b++) { int c = a+b; if (c > pow(valRads[a]*valRads[b]*valRads[c], S) && not_mutual_primes(a,b,c)) { printf("%d + %d = %d\n", a,b,c); cnt += 1; } } } printf("Done, cnt=%d\n", cnt); time(&end_t); float diff_t = difftime(end_t, start_t); printf("N=%lld, T = %.2fs\n", N_MAX, diff_t); } 


рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ C ++ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрд▓рд╕реА рд╣реИрдВ, рдПрдХ рдереЛрдбрд╝рд╛ рдЕрдиреБрдХреВрд▓рд┐рдд рдкрд╛рдпрдерди рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдХрд┐рд╕реА рднреА рдСрдирд▓рд╛рдЗрди рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдореИрдВрдиреЗ https://repl.it/languages/python рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ)ред

рдкрд╛рдпрдерди рд╕рдВрд╕реНрдХрд░рдг
 from __future__ import print_function import math import time import multiprocessing prime_factors_list = [] rad_list = [] def prime_factors(n): factors = [] # Print the number of two's that divide n while n % 2 == 0: factors.append(int(2)) n = n / 2 # n must be odd at this point so a skip of 2 ( i = i + 2) can be used for i in range(3, int(math.sqrt(n)) + 1, 2): # while i divides n , print i ad divide n while n % i == 0: factors.append(int(i)) n = n / i # Condition if n is a prime number greater than 2 if n > 2: factors.append(int(n)) return factors def rad(n): result = 1 for num in prime_factors_list[n]: result *= num return result def not_mutual_primes(a,b,c): fa, fb, fc = prime_factors_list[a], prime_factors_list[b], prime_factors_list[c] return len(fa.intersection(fb)) == 0 and len(fa.intersection(fc)) == 0 and len(fb.intersection(fc)) == 0 def calculate(N): S = 1.2 cnt = 0 for a in range(1, N): for b in range(a, N): c = a+b if c > (rad_list[a]*rad_list[b]*rad_list[c])**S and not_mutual_primes(a, b, c): print("{} + {} = {}".format(a, b, c)) cnt += 1 print("N: {}, CNT: {}".format(N, cnt)) return cnt if __name__ == '__main__': t1 = time.time() NMAX = 100000 prime_factors_list = [0]*(2*NMAX+2) rad_list = [0]*(2*NMAX+2) for p in range(1, 2*NMAX+2): prime_factors_list[p] = set(prime_factors(p)) rad_list[p] = rad(p) calculate(NMAX) print("Done", time.time() - t1) 


рдкрд░рд┐рдгрд╛рдо


рддреНрд░рд┐рдХ a, b, c рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдХрдо рд╣реИрдВред

рдХреБрдЫ рдкрд░рд┐рдгрд╛рдо рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд╣реИрдВ:
рдПрди = 10 : 1 "рддреАрди", рд▓реАрдб рд╕рдордп <0.001c
1 + 8 = 9

рдПрди = 100 : 2 "рдЯреНрд░рд┐рдкрд▓реНрд╕", рд░рдирдЯрд╛рдЗрдо <0.001 рд╕реА
1 + 8 = 9
1 + 80 = 81

рдПрди = 1000 : 8 "рдЯреНрд░рд┐рдкрд▓реНрд╕", рд░рдирдЯрд╛рдЗрдо <0.01c
1 + 8 = 9
1 + 80 = 81
1 + 242 = 243
1 + 288 = 289
1 + 512 = 513
3 + 125 = 128
13 + 243 = 256
49 + 576 = 625

рдПрди = 10000 : 23 "рдЯреНрд░рд┐рдкрд▓реНрд╕", рд░рдирдЯрд╛рдЗрдо 2 рдПрд╕

10000 рдХреЗ рдКрдкрд░ рдП, рдмреА, рд╕реА рдХреЗ рдкреЗрдбрд╝
1 + 8 = 9
1 + 80 = 81
1 + 242 = 243
1 + 288 = 289
1 + 512 = 513
1 + 2400 = 2401
1 + 4374 = 4375
1 + 5831 = 5832
1 + 6560 = 6561
1 + 6655 = 6656
1 + 6859 = 6860
3 + 125 = 128
5 + 1024 = 1029
10 + 2187 = 2197
11 + 3125 = 3136
13 + 243 = 256
49 + 576 = 625
1331 + 9604 = 10935
81 + 1250 = 1331
125 + 2187 = 2312
243 + 1805 = 2048
289 + 6272 = 6561
625 + 2048 = 2673

рдПрди = 100000 : 53 рдЯреНрд░рд┐рдкрд▓реНрд╕, рд░рдирдЯрд╛рдЗрдо 50 рд╕реА

100,000 рд╕реЗ рдКрдкрд░ рдП, рдмреА, рд╕реА
1 + 8 = 9
1 + 80 = 81
1 + 242 = 243
1 + 288 = 289
1 + 512 = 513
1 + 2400 = 2401
1 + 4374 = 4375
1 + 5831 = 5832
1 + 6560 = 6561
1 + 6655 = 6656
1 + 6859 = 6860
1 + 12167 = 12168
1 + 14336 = 14337
1 + 57121 = 57122
1 + 59048 = 59049
1 + 71874 = 71875
3 + 125 = 128
3 + 65533 = 65536
5 + 1024 = 1029
7 + 32761 = 32768
9 + 15616 = 15625
9 + 64000 = 64009
10 + 2187 = 2197
11 + 3125 = 3136
13 + 243 = 256
28 + 50625 = 50653
31 + 19652 = 19683
37 + 32768 = 32805
49 + 576 = 625
49 + 16335 = 16384
73 + 15552 = 15625
81 + 1250 = 1331
121 + 12167 = 12288
125 + 2187 = 2312
125 + 50176 = 50301
128 + 59049 = 59177
169 + 58880 = 59049
243 + 1805 = 2048
243 + 21632 = 21875
289 + 6272 = 6561
343 + 59049 = 59392
423 + 16384 = 16807
507 + 32768 = 33275
625 + 2048 = 2673
1331 + 9604 = 10935
1625 + 16807 = 18432
28561 + 89088 = 117649
28561 + 98415 = 126976
3584 + 14641 = 18225
6561 + 22000 = 28561
7168 + 78125 = 85293
8192 + 75843 = 84035
36864 + 41261 = 78125

рдПрди = 1,000,000 рдХреЗ рд╕рд╛рде, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ 102 "рдЯреНрд░рд┐рдкрд▓реНрд╕" рд╣реИрдВ, рд╕реНрдкреЙрдЗрд▓рд░ рдХреЗ рддрд╣рдд рдПрдХ рдкреВрд░реА рд╕реВрдЪреА рджреА рдЧрдИ рд╣реИред

1,000,000 рдХреЗ рд▓рд┐рдП рдП, рдмреА, рд╕реА рдХреЗ рдкреЗрдбрд╝
1 + 8 = 9
1 + 80 = 81
1 + 242 = 243
1 + 288 = 289
1 + 512 = 513
1 + 2400 = 2401
1 + 4374 = 4375
1 + 5831 = 5832
1 + 6560 = 6561
1 + 6655 = 6656
1 + 6859 = 6860
1 + 12167 = 12168
1 + 14336 = 14337
1 + 57121 = 57122
1 + 59048 = 59049
1 + 71874 = 71875
1 + 137780 = 137781
1 + 156249 = 156250
1 + 229375 = 229376
1 + 263168 = 263169
1 + 499999 = 500000
1 + 512000 = 512001
1 + 688127 = 688128
3 + 125 = 128
3 + 65533 = 65536
5 + 1024 = 1029
5 + 177147 = 177152
7 + 32761 = 32768
9 + 15616 = 15625
9 + 64000 = 64009
10 + 2187 = 2197
11 + 3125 = 3136
13 + 243 = 256
13 + 421875 = 421888
17 + 140608 = 140625
25 + 294912 = 294937
28 + 50625 = 50653
31 + 19652 = 19683
37 + 32768 = 32805
43 + 492032 = 492075
47 + 250000 = 250047
49 + 576 = 625
49 + 16335 = 16384
49 + 531392 = 531441
64 + 190269 = 190333
73 + 15552 = 15625
81 + 1250 = 1331
81 + 123823 = 123904
81 + 134375 = 134456
95 + 279841 = 279936
121 + 12167 = 12288
121 + 255879 = 256000
125 + 2187 = 2312
125 + 50176 = 50301
128 + 59049 = 59177
128 + 109375 = 109503
128 + 483025 = 483153
169 + 58880 = 59049
243 + 1805 = 2048
243 + 21632 = 21875
289 + 6272 = 6561
338 + 390625 = 390963
343 + 59049 = 59392
423 + 16384 = 16807
507 + 32768 = 33275
625 + 2048 = 2673
864 + 923521 = 924385
1025 + 262144 = 263169
1331 + 9604 = 10935
1375 + 279841 = 281216
1625 + 16807 = 18432
2197 + 583443 = 585640
2197 + 700928 = 703125
3481 + 262144 = 265625
3584 + 14641 = 18225
5103 + 130321 = 135424
6125 + 334611 = 340736
6561 + 22000 = 28561
7153 + 524288 = 531441
7168 + 78125 = 85293
8192 + 75843 = 84035
8192 + 634933 = 643125
9583 + 524288 = 533871
10816 + 520625 = 531441
12005 + 161051 = 173056
12672 + 117649 = 130321
15625 + 701784 = 717409
18225 + 112847 = 131072
19683 + 228125 = 247808
24389 + 393216 = 417605
28561 + 89088 = 117649
28561 + 98415 = 126976
28561 + 702464 = 731025
32768 + 859375 = 892143
296875 + 371293 = 668168
36864 + 41261 = 78125
38307 + 371293 = 409600
303264 + 390625 = 693889
62192 + 823543 = 885735
71875 + 190269 = 262144
131072 + 221875 = 352947
132651 + 588245 = 720896


рдХрд╛рд╢, рдХрд╛рд░реНрдпрдХреНрд░рдо рдЕрднреА рднреА рдзреАрд░реЗ-рдзреАрд░реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдореИрдВрдиреЗ рдПрди = 10,000,000 рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдирд╣реАрдВ рдХреА, рдЧрдгрдирд╛ рдХрд╛ рд╕рдордп рдПрдХ рдШрдВрдЯреЗ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ (рд╢рд╛рдпрдж рдореИрдВрдиреЗ рдХрд╣реАрдВ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдЧрд▓рддреА рдХреА, рдФрд░ рдореИрдВ рдмреЗрд╣рддрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ)ред

рдФрд░ рднреА рджрд┐рд▓рдЪрд╕реНрдк рдкрд░рд┐рдгрд╛рдо рдХреЛ рд░реЗрдЦрд╛рдВрдХрди рдХреЗ рд╕рд╛рде рджреЗрдЦрдирд╛ рд╣реИ:



рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдпрд╣ рдХрд╛рдлреА рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдПрди рдкрд░ рд╕рдВрднрд╛рд╡рд┐рдд рддреНрд░рд┐рдЧреБрдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдПрди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрд╛рдлреА рдзреАрдореА рд╣реЛ рдЬрд╛рддреА рд╣реИ, рдФрд░ рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рддреНрдпреЗрдХ each рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рд╡реИрд╕реЗ, ╬╡ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХреЗ рд╕рд╛рде, "triples" рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд░реВрдк рд╕реЗ рдХрдореА рдЖрддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,, = 0.4 рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ N <100000 (1 + 4374 = 4375 рдФрд░ 34,0 + 59049 = 59392) рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ 2 рд╕рдорд╛рдирддрд╛рдПрдБ рд╣реИрдВред рддреЛ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рдореЗрдп рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ (рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рдФрд░ рд╢рд╛рдпрдж рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдХрдВрдкреНрдпреВрдЯрд░реЛрдВ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рд╢рд╛рдпрдж рдпрд╣ рд╕рдм рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдЧрдгрдирд╛ рдХреА рдЧрдИ рд╣реИ)ред

рдЬреЛ рд▓реЛрдЧ рдЕрдкрдиреЗ рджрдо рдкрд░ рдкреНрд░рдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ 10,000,000 рдФрд░ рдЕрдзрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдо рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рдЙрдиреНрд╣реЗрдВ рд▓реЗрдЦ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред рдмреЗрд╢рдХ, рдпрд╣ "рдЧрд┐рдирддреА" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ "рдЯреНрд░рд┐рдкрд▓" рдХрд╛ рд╕реЗрдЯ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрдврд╝рдирд╛ рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓рдВрдмрд╛ рд╕рдордп рд▓реЗ рд╕рдХрддрд╛ рд╣реИ, рдЧрдгрдирд╛ рдХреА рдЧрддрд┐ рдПрди рдХреЗ рд░реВрдк рдореЗрдВ рдПрди * рдПрди (рдпрд╛ рд╢рд╛рдпрдж рдПрди ^ 3) рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИ, рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрд╣реБрдд рд▓рдВрдмрд╛ред рдлрд┐рд░ рднреА, рдПрдХ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рдЪреАрдЬ рдкрд╛рд╕ рдореЗрдВ рд╣реИ, рдФрд░ рдЬреЛ рд▓реЛрдЧ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд╡реЗ рдЦреЛрдЬ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдЬреИрд╕рд╛ рдХрд┐ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╕реБрдЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рд╣реИ - рдПрди рдореЗрдВ 10 ^ 18 рддрдХ рдХреА рд╕реАрдорд╛ рдореЗрдВ "рдЯреНрд░рд┐рдкрд▓" рдХреА рд╕рдВрдЦреНрдпрд╛ рдЕрднреА рднреА рдмрдврд╝ рд░рд╣реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕реЗрдЯ рдХрд╛ "рдЕрдВрдд" рдЕрднреА рддрдХ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИред рд╕рднреА рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк - рд╕рд╛рдЬрд╝рд┐рд╢ рдЕрднреА рднреА рд╕рдВрд░рдХреНрд╖рд┐рдд рд╣реИред

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


All Articles