Питон 3, 78 77 75 70 68 62 байта
bc -l
Спасибо @xnor за то, что он украл 2 4 байта и проложил путь для еще 4!
Попробуйте онлайн!
Фон
Напомним, что теорема Вильсона утверждает, что для всех целых чисел к > 1,
где а ≡ б (по модулю d) означает, что а - б делится нацело на д, то есть, а и б имеют одинаковый остаток при делении на д.
В Теоремы Вильсона для двойных, гипер-, суб- и суперфакториалов, авторы доказывают обобщения для двойных факториалов, на которых строится этот ответ. двойной факториал целого числа к ≥ 0 определяется
Теорема 4 указанной статьи гласит следующее.
Возводя обе части сравнений в четвертую степень, приходим к выводу, что
для всех нечетных простых чисел п. С 1!! = 1эквивалентность справедлива и для р = 2.
Теперь, проделав то же самое с теоремой Вильсона, мы обнаруживаем, что
С
отсюда следует, что
в любое время п является простым.
Теперь позвольте к быть нечетным положительным составным целым числом. По определению существуют целые числа а, б > 1 такой, что к = аб.
С к странно, как и а и б. Таким образом, оба происходят в последовательности 1, 3, …, к - 2 и
где | указывает на делимость.
Подводя итог, для всех нечетных целых чисел к > 1
где р(к) = 1 если к является простым и р(к) = 0 если к является составным.
Как это работает
Когда функция ж вызывается с одним аргументом, к, м, и дж инициализируются как 3, 1, и 0.
Обратите внимание, что ((к - 2)!!)4 = 1!!4 = 1 = м. В самом деле, равенство м = ((к - 2)!!)4 будет держаться всегда. дж это плавать и всегда будет равен ((к - 4)!!)4 % (к - 2) / (к - 2).
Пока \$k < n\$, правый аргумент for((k=4;k<$1;k++,j=k-2)){ [ `factor $k $j|wc -w` = 4 ]&&x=$x+1/$k+1/$j;};bc -l<<<0$x
will get evaluated. Since \$j = \frac{\mod(\left(\left(k - 4\right)!!\right)^4 , k - 2)}{k - 2}\$, as proven in the first paragraph, \$j = \frac{1}{k - 2}\$ if \$k - 2\$ is prime and \$j = 0\$ if not. Likewise, since \$\mod(m,k) = \left(\left(k - 2\right)!!\right)^4\$ equals \$1\$ if \$k\$ is prime and \$0\$ if not, \$\mod(-m,k) = k - 1\$ if \$k\$ is prime and \$\mod(-m , k) = 0\$ if not. Therefore, ʁ # Range from 0, n-1
~ # Filter by:
æ # Is prime
2l # Get the overlapping groups of 2
' ; # Filter those by:
÷ε # Absolute difference of the list
2= # Equals 2
f # Flatten to make one list
Ė # Take the reciprocal of each
# Sum with the s flag
# Convert to decimal format with the ḋ flag
# Implicitly print
оценивается как \$\frac{2\left(k - 1\right)}{k\left(k - 2\right)} = \frac{\left(k - 2\right) + k}{k(k - 2)} = \frac{1}{k} + \frac{1}{k - 2}\$, если пара \$\left(k - 2, k\right)\$ состоит из простых чисел-близнецов и \$0\$, если нет.
После вычисления вышеизложенного мы добавляем результат к возвращаемому значению рекурсивного вызова. ʁ~æ2l'÷ε2=;fĖ
. \$k\$ gets incremented by \$2\$ so it only takes odd values‡†, мы умножаем \$m\$ на \$k^4\$, поскольку \$mk^4 = \left(\left(k - 2\right)!!\right)^4k^4 = \left(k! !\right)^4\$ и передайте текущее значение \$\frac{\mod(m,k)}{k}\$ – которое равно \$\frac{1}{k}\$, если «старый» \$k\$ является простым числом, а \$0\$ — в качестве параметра \$j\$ для вызова функции.
Наконец, как только \$k\$ станет равным или больше, чем \$n\$, \$f\$ вернет ЛОЖЬ и рекурсия останавливается. Возвращаемое значение \$f(n)\$ будет суммой всех \$\frac{1}{k} + \frac{1}{k - 2}\$ таких \$\left(k - 2 , k\right)\$ — пара простых чисел-близнецов и \$k < n\$, как и хотелось.
‡ Результаты Фон абзац сохраняется только для нечетных целых чисел. Поскольку даже целые числа не могут быть простыми числами-близнецами, мы можем их безопасно пропустить.