Soul FriendНу и почему Вы решили что
gcd() не работает? Они очень даже работают, просто в проверяемом интервале нет близнецов имеющих наименьший простой делитель больше чем
.
Например в интервале
все числа (и близнецы и нет, и простые и составные) имеют делители не превосходящие
, что делает их
не взаимно простыми с
.
Т.е. Вы просто что-то не то посчитали, а
gcd() работают как надо.
Отдельный вопрос что уже для
Вы пытаетесь считать
и
floor ругается на точность вычислений с плавающей точкой (38 знаков не хватает для правильного округления). Потому
prodeuler мне и не нравится и предпочитаю праймориалы считать руками (
p=1;forprime(i=1,x,p*=i);), так хотя бы сразу гарантированно выдаётся целое число, пусть даже и огроменное.
Ну что вместо
for и
prime стоит пользоваться специализированными
forprime и
forstep (нечётные
гарантированно не подходят), а также выносить из цикла вычисления не зависящие от переменной цикла (например праймориала или
идя переменной цикла сразу от
до
) — дело ваше конечно, хотите лишних тормозов и вероятности ошибок/опечаток, их и получите.
-- 31.03.2021, 15:27 --Думаю Вы взяли не тот праймориал, надо было или
или
(в данном случае без разницы, но первый разумеется лучше так как числа меньше), но никак не
.