形如以 2 开头, 之后跟任意多个 3 的十进制整数而且是个素数, 则它是猫扑素数. 如 2, 23, 233, 2333, 23333 都是猫扑素数, 而 233333 则不是, 它可以分解为 353 x 661.
Java 实现
public class MopPrime {
private static boolean isMopNum(int n) {
if (n < 10) return n == 2;
else return n % 10 == 3 && isMopNum(n / 10);
}
private static boolean isPrimeNum(int n) {
if (n < 2) return false;
for (int i = 2; i <= Math.sqrt(n); i++) {
if (n % i == 0) return false;
}
return true;
}
public static void main(String[] args) {
for (int i = 0; i < 1000000000; i++) {
if (isMopNum(i) && isPrimeNum(i)) {
System.out.println(i + " is mop prime number.");
}
}
}
}
Kotlin 实现
fun isMopNum(n: Int): Boolean {
if (n < 10) return n == 2
else return n % 10 == 3 && isMopNum(n / 10)
}
fun isPrimeNum(n: Int): Boolean {
if (n < 2) return false
for (i in 2..Math.sqrt(n.toDouble()).toInt()) {
if (n % i == 0) return false
}
return true
}
fun main(args: Array<String>) {
for (i in 0..1_000_000_000) {
if (isMopNum(i)
&& isPrimeNum(i)) {
println("$i is mop prime number.")
}
}
}