Код:
for(j = 1, #prter, if( bo[j] == i % prter[j], next(2)));
for(j = 1, #T, if( T[j] == i % dopp[j] , next(2)));
prter — простые для терапевтики;
bo — badost, плохие остатки по ним;
dopp — дополнительные простые;
T — оставил обозначение Владимира, тоже плохие остатки, но уже по допам.
Почему у меня обе эти проверки без биттеста? Потому что тесты для Убунты не показали сколько-нибудь заметного различия в скорости. Стало быть, лишнее вычисление лучше убрать.
pro — произведение;
ip — оставил обозначение Дмитрия, интерпретировал как индекс простого (перебираемого места).
И "d" у меня от слова displacement=смещение (в том числе в смысле индекса).
Ну а я вот привык, что d это диаметр и меня это путало.