[算法]猫扑素数的算法实现

猫扑素数的定义

所谓猫扑数

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

素数是指:

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

因此,猫扑素数即上述两种概念的交集,即该集合中的数字既是猫扑数,也是素数


猫扑素数的实现

// 判断i是否是猫扑数
private boolean isMopNumber (int i ){
    if (i < 10 ) return i == 2;
    else return (i % 10 == 3 ) && isMopNumber (i / 10 );// 很巧妙的算法,根据猫扑数特点:最开头是2,后面是任意个3,利用递归进行判断
}

// 判断i是否为素数
private boolean isPrime(int i){
    if(i < 2) return false;
    else {
        for(int j = 2; j < Math.sqrt(i); j++){// sqrt求i的平方根
            if(i % j == 0){
                return false;
            }
        }
        return true;
    }
}

// 测试函数,列出1~1000之间的猫扑素数
private void test(){
    for(int i = 0; i <= 1000; i++){
        if(isMopNumber(i) && isPrime(i)) 
        Log.d(TAG, i + " is mopNumber and primeNumber!");
    }
}

以上就是猫扑素数的求解过程了,主要是对概念的认识,其次判断猫扑数的算法也值得思考。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值