Форум » Обработка целых чисел » задание 25 номер 209 » Ответить

задание 25 номер 209

elpov06: здравствуйте, я не понимаю условия задачи 209) (И. Женецкий) Назовём J-простым число, которое отличается не более, чем на 5, от числа, являющегося степенью двойки. Например, 11 является J-простым числом, т.к. оно простое и от отличается на 3 от числа 8 = 23 (и на 5 от числа 16 = 25). Найдите все J-простые числа в диапазоне [99999; 1048571] и выведите их в порядке возрастания. Справа от каждого числа выведите ближайшее число, которое является степенью двойки. У меня получается много подходящих чисел Например, число 131067 , ведь оно отличается от степени двойки - 131072, на 5(не более чем на 5), вроде подходит под ответ далее 131068 , отличается от 131072 на 4 А в ответе эти числа не учитываются, а начинается ответ с 131071 131072 Подскажите пожалуйста в чем ошиблась! [pre2] a=[] b=[] for i in range (16, 24): a.append(2**i) print(a) for j in range (99999, 1048571+1): for i in range(len(a)): if (abs(j-a[ i])<=5): b.append(j) print(b,a[ i], abs(j-a[ i])) print(b) [/pre2]

Ответов - 2

AnnaPershina: [pre2] def p(x): return x>1 and all(x%i!=0 for i in range(2,int(x**0.5)+1)) for x in range(99999,1048571+1): if p(x): y=len(bin(x)[2:]) if abs(x - 2**(y-1))<=5 or abs(x - 2**y)<=5: if abs(x - 2**(y-1)) < abs(x - 2**y): print(x,2**y-1) else: print(x,2**y) [/pre2]

AnnaPershina: число 131067 составное, а по условию числа простые должны быть. А у Вас нет проверки простое число или нет.



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