263. 丑数

在这里插入图片描述
说实话一开始曲解意思了,方法1虽丑但是实用,如果一个数的两个因子,其中有一个是质数,而且不是235的话就直接false
方法2是很好的方法,因为丑数不只是质因数为235,可以说它的因数只有235,30这个丑数,虽然有一对因数为2,15,但是15最后也会被拆分成35。
所以我们可以把丑数认为是2
i+3j+5k这样的,如果n可以整除2就一直整除,然后再对3和5做相同的操作,判断最后n是否为1就行了,为1证明是由这三个数字相乘得来的。
1是第一个丑数,负数以及0不是丑数

class Solution {
public:
    // bool isPrime(int x){
    //     if(x <= 1) return false;
    //     int Sqrt = (int)sqrt(x);
    //     for(int i = 2; i <= Sqrt; ++i){
    //         if(x % i == 0) return false;
    //     }
    //     return true;
    // }
    bool isUgly(int n) {
       //判断n的因数中是否有除了235的质数
        // if(n == 1) return true;
        // if(n <= 0) return false;
        // for(int i = 1; i <= (int)sqrt(n); ++i){
        //     if(n%i == 0){
        //         if(isPrime(i) && i != 2 && i != 3 && i != 5) return false;
        //         if(isPrime(n/i) && n/i != 2 && n/i != 3 && n/i != 5) return false;
        //     }
        // }
        // return true;

        //法二:迭代
        //负数和0全不是丑数,它们没资格!
        //丑数的定义是它可以有别的因数,但是质因数只能有2,3,5,那些因数也统统由丑数组成,比如30,可以由2*15组成,但是15是由3*5组成的
        //所以丑数只能由这3个数相乘得出,就是2*i+3*j+5*k
        if(n < 1) return false;
        while(n % 2 == 0) n/=2;
        while(n % 3 == 0) n/=3;
        while(n % 5 == 0) n/=5;
        return n == 1;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值