Форум » Обработка целых чисел » №4202 (числа-близнецы) из генератора » Ответить

№4202 (числа-близнецы) из генератора

pts56: (Б. Баобаба) Числа-близнецы — это такие простые числа, которые отличаются друг от друга на 2. Найдите все пары чисел-близнецов в диапазоне [3 000 000; 10 000 000]. В ответе запишите количество найденных пар и среднее арифметическое последней пары. Можно получить комментарий к этому решению? start = 3000000 end = 10000000 #start, end = 1, 100 count = 0 primes = [1]*(end+1) for d in range(2, round(end**0.5)): if primes[d]: #что проверяет это условие?? for k in range(2*d,end+1,d): primes[k] = False print( [x for x in range(start,end+1) if primes[x]] ) count = 0 avg = 0 for x in range(start,end-1): if primes[x] and primes[x+2]: count += 1 avg = x + 1 print( x, x+2 ) print( count, avg )

Ответов - 5

Поляков: Давайте вы сначала оформите это решение (см. замечание в желтой рамке вверху).

pts56@ya.ru: [pre2] start = 3000000 end = 10000000 #start, end = 1, 100 count = 0 primes = [1]*(end+1); for d in range(2, round(end**0.5)): if primes[d]: # вот в этом моменте не понятно по какому условию заполняется массив for k in range(2*d,end+1,d): # здесь убираем все четные делители primes[k] = False; #print( [x for x in range(start,end+1) if primes[ x]] ) count = 0 avg = 0 for x in range(start,end-1): if primes[x] and primes[x+2]: count += 1 avg = x + 1 #print( x, x+2 ) print( count, avg ) [/pre2]

pts56@ya.ru: и почему вот так на больших значения не работает, суть одна и таже, разница в заполнении массива [pre2] # создать массив делителей - это простые нечетные def f(n): return all(n % i!=0 for i in range(2, int(n ** 0.5) + 1)) b = [] for i in range(3*10**6, 10*10**6): if i % 2 != 0 and f(i): b.append(i) #print(b) count = 0 avg = 0 for x in range(3*10**6, 10*10**6): if x in b and (x+2) in b: count += 1 avg = x + 1 #print( x, x+2 ) print( count, avg ) [/pre2]


Поляков: pts56@ya.ru пишет: вот в этом моменте не понятно по какому условию заполняется массив Посмотрите источники по теме "Решето Эратосфена". Например, здесь.и почему вот так на больших значения не работает, суть одна и таже, разница в заполнении массива Потому что этот способ сильно медленнее.

pts56@ya.ru: Спасибо.



полная версия страницы