Обратите внимание, что e — трансцендентное число (на тайском языке оно называется "จำนวนอดิศัย")
Трансцендентное число — это (возможно, комплексное) число, которое не является корнем какого-либо целочисленного многочлена, а это означает, что оно не является алгебраическим числом любой степени. . Каждое действительное трансцендентное число также должно быть иррациональным, поскольку рациональное число по определению является алгебраическим числом первой степени.
в том же значении не является корнем
с кодом вольфрама
Генеральный директор Wolfram Research и автор A New Kind of Science Стивен Вольфрам прислал решение в виде одной строки кода Mathematica (язык Wolfram):
Выберите[FromDigits/@Partition[First[RealDigits[E,10,1000]],10,1],PrimeQ,1]
порядок проверки моего кода на языке Wolfram:
PrimeQ[Table[Mod[Floor[10^(n + 10) Exp[1]], 10¹⁰], {n, 0, 100}]]
ответ показывает, что первое 10-значное простое число в последовательных цифрах e начинается с 98-й цифры, которая точно отвечает
с кодом питона
import numpy
import math
def prime(a):
if a == 2: return True
if a % 2 == 0: return False
if a < 2: return False
i = 2
n = math.sqrt(a) + 1
while(i < n):
if a % i == 0:
return False
i += 1
return True
def prime_e():
e = '%0.51f' % math.exp(1)
e = e.replace("2.","")
for i in range(len(e)):
x = int(e[i:10+i])
if prime(x):
return [i, x]
print prime_e()
вывод [20, 5598298427]
проверить с помощью языка wolfram
с PrimeQ[5598298427]
и Table[Mod[Floor[10^(n + 10) Exp[1]], 10¹⁰], {n, 0, 100}]
ответ простой, но не точный относительно действительного значения e из числового округления в процессе кодирования нельзя использовать этот код в диапазоне 100 последовательных цифр e.
попробуйте с кодом Python расширения серии Эйлера
import operator
import decimal as dc
def edigits(p):
dc.getcontext().prec = p
factorial = 1
euler = 2
for x in range(2, 150):
factorial *= x
euler += dc.Decimal(str(1.0))/dc.Decimal(str(factorial))
return euler
estring = edigits(150).to_eng_string()[2:]
for i in range(len(estring)-10):
x = int(reduce(operator.add,estring[i:i+10]))
if isprime(x):
print x
print i
break
выход
7427466391
98
в заключение, что алгоритм и эффект округления с ответом на функцию пола на языке вольфрама и расширение ряда Эйлера в коде Python имеют точность в диапазоне 100 последовательных цифр e.