求自然數(shù)n內(nèi)所有貓撲素數(shù)
貓撲數(shù):指以2開頭置侍,后面跟任意個3的十進(jìn)制數(shù)马篮。如:2沾乘、23、233等浑测。
素數(shù)(質(zhì)數(shù)):在大于1的自然數(shù)中意鲸,除了1和它本身以外不再有其他因數(shù),這樣的數(shù)稱為素(質(zhì))數(shù)尽爆。
合數(shù):自然數(shù)中除能被1和本數(shù)整除外怎顾,還能被其他的數(shù)整除的數(shù)。如果一個數(shù)是合數(shù)漱贱,那么它的最小質(zhì)因數(shù)肯定小于等于他的平方根槐雾。例如:50,最小質(zhì)因數(shù)是2幅狮,2<50的開根號募强,
再比如:15,最小質(zhì)因數(shù)是3崇摄,3<15的開根號擎值。。1和0既非素數(shù)也非合數(shù)逐抑。
代碼實現(xiàn)
public static void main(String[] args) {
MopPrime obj = new MopPrime();
for (int i = 0; i < Integer.MAX_VALUE; i++) {
if (obj.isMopPrime(i)) {
System.out.println(" 貓撲素數(shù) :" + i);
}
}
}
private boolean isMopPrime(int n) {
return isMop(n) && isPrime(n);
}
private boolean isMop(int n) {
if (n < 10) {
return n == 2;
} else {
// 從后往前按位依次檢查
return (n % 10 == 3) && isMop(n / 10);
}
}
private boolean isPrime(int n) {
boolean flag = true;
if (n < 2) {
flag = false; //素數(shù)不小于2
} else {
// 如果一個數(shù)是合數(shù)鸠儿,那么它的最小質(zhì)因數(shù)肯定小于等于他的平方根。
for (int i = 2; i <= Math.sqrt(n); i++) {
if (n % i == 0) {
flag = false;
break;
}
}
}
return flag;
}
判斷素數(shù)的方法還可優(yōu)化厕氨。思路:找規(guī)律避免無用判斷进每。