Форум » Обработка целых чисел » 25_5288 (М. Фирсов) » Ответить

25_5288 (М. Фирсов)

NataliRay: Здравствуйте! Помогите разобраться. Не сходится ответ. Мой вариант программы: [pre2] divs=[] for m in range(2,500001): kdivs=0 if m>10: k=int(m**0.5) else: k=m for d in range(2,k): if m%d==0: kdivs+=1 break if kdivs==0: divs+=[m] for n in range(100000,500000+1): divsn=[] for d in divs: if n%d==0: divsn+=[d] if len(divsn)> 3: p=0 r=divsn[1]-divsn[0] if r!=0: for i in range(len(divsn)-1): if divsn[ i+1 ]-divsn[ i ]==r: p+=1 if p==len(divsn)-1: print(n,len(divsn)*r) [/pre2] В результате получается: 101065 48 124729 24 177289 48 278185 72 А у М. Фирсова ответ: 101065 48 107525 24 124729 24 177289 48 236555 24 278185 72 365585 24 494615 24

Ответов - 3

Поляков: Поищите эту задачу здесь, а авторское решение - здесь.

NataliRay: Благодарю за ваш ответ. В моём варианте ищутся только простые делители, а в варианте М. Фирсова: [pre2] def factorization(n): for div in range(2, int(n ** 0.5) + 1): if n % div == 0: return [div] + factorization(n // div) return [n] [/pre2] Видимо из-за этого ответы только частично совпадают.

Ж: [pre2] de=lambda n: sorted([c for c in set(chain(*[(a,n//a) for a in range(1,int(n**0.5)+1) if n%a==0])) if c in res]) def reseto(n): l=[]; r=set() for i in range(2,n+1): if i not in r: l.append(i) r.update(range(i**2,n+1,i)) return l res=reseto(85000) for n in range(100000,500001): delit=de(n) if len(delit)>3 and all(delit[i+1]-delit==delit[i+2]-delit[i+1] for i in range(len(delit)-2)): print(n, len(delit)*(delit[1]-delit[0])) [/pre2]




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