【算法】猫扑素数

求自然数n内所有猫扑素数

  • 猫扑数:指以2开头,后面跟任意个3的十进制数。如:2、23、233等。

  • 素数(质数):在大于1的自然数中,除了1和它本身以外不再有其他因数,这样的数称为素(质)数。

  • 合数:自然数中除能被1和本数整除外,还能被其他的数整除的数。如果一个数是合数,那么它的最小质因数肯定小于等于他的平方根。例如:50,最小质因数是2,2<50的开根号,
    再比如:15,最小质因数是3,3<15的开根号。。

  • 1和0既非素数也非合数。

代码实现

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(" 猫扑素数 :" + 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; //素数不小于2
        } else {
            // 如果一个数是合数,那么它的最小质因数肯定小于等于他的平方根。
            for (int i = 2; i <= Math.sqrt(n); i++) {
                if (n % i == 0) {
                    flag = false;
                    break;
                }

            }
        }
        return flag;
    }

判断素数的方法还可优化。思路:找规律避免无用判断。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容