Форум » Обработка целых чисел » 5227 Не могу понять как правильно » Ответить

5227 Не могу понять как правильно

Ilya Panov: Добрый день! Немножко не понимаю, как именно следовало написать код к данной задаче. Вот мое решение: def p(n): #проверка на простое число k = 0 for i in range(2, int(n**0.5)+1): if n%i==0: k += 2 break if k==0: return 1 else: return 0 m = [] for k in range(500): n = 500000000+k b = [] if n == int(n**0.5)**2: # проверка на полный квадрат if p(n**0.5): b.append(n**0.5) for d in range(2, int(n**0.5)): #проверка на другие делители отличные от корня числа, при его наличии if n%d==0: if p(d) and p(n//d): b.append(d) b.append(n//d) if len(b) >=3: break if 1<=len(b)<3: # m.append((k, max(b))) if len(m)==5: break print(m) Мой ответ: 17 45454547 14 250000007 10 250000005 6 250000003 2 250000001 Правильный ответ: 21 266099 19 166666673 17 45454547 9 1 3 1 Как стало ясно из ответа - меня подловили на возможности того, что число простое. Однако даже учитывая этот факт в своем коде(обновленный код во всех вариациях я не включил в пост), у меня все равно выходит неверный ответ. Как же все таки нужно было это решать? P. s.: не понял, как сделать так, чтобы сайт учитывал табуляцию

Ответов - 3

Ilya Panov: файл с кодом загрузил на яндекс диск: ссылка

Поляков: Ilya Panov пишет: не понял, как сделать так, чтобы сайт учитывал табуляцию Прочитать текст в желтой рамке в верхней части страницы.

Ж: [pre2] from itertools import * de=lambda n: sorted(list(set(chain(*[(a,n//a) for a in range(1,int(n**0.5)+1) if n%a==0])))) l=[] for n in range(500000000, 500000000+100): delit=de(n) if len([(a,b,c) for (a,b,c) in product(delit[1::],repeat=3) if a*b*c==n])==0: l.append((n-500000000,max(delit[:-1]))) for c in sorted(l, reverse=True)[-5:]: print(c[0],c[1], sep=' ') [/pre2]




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