Введение
Как-то я исследовал способы наиболее эффективного определения простоты числа и наткнулся на следующий код:
public static boolean isPrime(int n) {
return !new String(new char[n]).matches(".?|(..+?)\1+");
}
Он меня заинтриговал. Хоть это, возможно, и не самый эффективный способ, но определённо один из наименее очевидных, поэтому мне стало любопытно. Каким образом соответствие регулярному выражению .?|(..+?)1+
должно показать, что число непростое (после его преобразования в унарную систему счисления)?