Ответ 1
Я думаю, что статья объясняет это довольно хорошо, но я тоже попробую ее.
Вход находится в форме unary. 1 - 1
, 2 - 11
, 3 - 111
и т.д. Zero - это пустая строка.
Первая часть регулярного выражения соответствует 0 и 1 как неглавная. Второй - это то, где волшебство срабатывает.
(11+?)
начинается с нахождения дивизоров. Он начинается с определения 11
или 2. \1
- это переменная, относящаяся к ранее зафиксированному совпадению, поэтому \1+
определяет, делится ли этот делитель на этот делитель. (111111
начинается с назначения переменной 11
и затем определяет, что оставшийся 1111
является 11
повторен, поэтому 6 делится на 2.)
Если число не делится на два, механизм регулярных выражений увеличивает делитель. (11+?)
становится 111
, и мы снова пытаемся. Если в любой точке регулярное выражение совпадает, число имеет делитель, который не дает остатка, поэтому число не может быть простым.