С этой статьи ,
/^1?$|^(11+?)\1+$/
проверяет, является ли число (его значение в унарном) простым или нет.
Используя это, perl -l -e '(1 x $_) !~ /^1?$|^(11+?)\1+$/ && print while ++$_;'
возвращает список простых чисел.
У меня недостаточно опыта работы с Perl, но я понимаю, что регулярное выражение будет true для числа, которое не является простым. Итак, если мы печатаем все числа, которые не выдают true с этим выражением, у нас есть список простых чисел. Вот что пытается сделать Perl-запрос.
О части регулярного выражения,
^1?$
часть для подсчета 1 как не простое число
^(11+?)\1+$
для сопоставления не простых чисел, начиная с 4.
Что я не понимаю, так это зачем вообще нужно ?
в регулярном выражении.
По моему мнению /^1$|^(11+)\1+$/
должно быть просто отлично, а на самом деле
perl -l -e '(1 x $_) !~ /^1$|^(11+)\1+$/ && print while ++$_;'
дает мне тот же набор простых чисел.
Есть ли какой-то недостаток в моем понимании регулярного выражения? Зачем нужны ?
?
Разве ?
не должен соответствовать нулю или одному вхождению предшествующего ему выражения?