Автор | Сообщение |
|
Отправлено: 09.04.22 06:36. Заголовок: n25 - 4986
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) Подскажите, как написать эффективный алгоритм для столь большого промежутка чисел.
|
|
|
Новых ответов нет
[см. все]
|
|
|
Отправлено: 09.04.22 22:13. Заголовок: Не надо перебирать в..
Не надо перебирать все числа из отрезка. Надо создавать палиндром самостоятельно: 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]) Данная программа создаёт 3-х, 5-ти, 7-ми и 9-ти значные палиндромы, которые не заканчиваются на 0, 2, 4, 5, 6, 8, то есть могут быть простыми. Палиндромы из четного числа разрядов не могут быть простыми, так как делятся на 11.
|
|
|