Форум » Обработка целых чисел » n25 - 4986 » Ответить

n25 - 4986

LostFly: [pre2] def p(x): if x%2==0: return 0 for i in range(3, int(x ** 0.5 + 2),2): if x % i == 0: return 0 if str(x) == str(x)[::-1]: return 1 else: return 0 def p2(x): s =1 s1 = str(x) for i in range(len(s1)): if s1[i]!='0': s*= int(s1[i]) else: continue return s pp =[0]*9**9 for i in range(10**2, 10**9): if p(i)==1: pp[p2(i)]=p2(i) mxpp = max(pp) for i in range(10**2, 10**9): if p(i)==1 and p2(i)==pp.index(mxpp): print(i) [/pre2] Подскажите, как написать эффективный алгоритм для столь большого промежутка чисел.

Ответов - 1

yflzu@mail.ru: Не надо перебирать все числа из отрезка. Надо создавать палиндром самостоятельно: [pre2]for i in range(1,10000): s=str(i) if s[0] not in '24568': for j in range(10): x=int(s+str(j)+s[::-1])[/pre2] Данная программа создаёт 3-х, 5-ти, 7-ми и 9-ти значные палиндромы, которые не заканчиваются на 0, 2, 4, 5, 6, 8, то есть могут быть простыми. Палиндромы из четного числа разрядов не могут быть простыми, так как делятся на 11.



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