检查一个号码是否很简陋

时间:2011-03-07 19:03:59

标签: java math methods

static boolean isPrime(int n)
    {
        if(n<=1) return false;
        if(n==2) return true;
        if(n%2==0) return false;
        int m = (int)Math.round(Math.sqrt(n));

        for(int i=3; i <= m; i+=2)
            if(n%i==0)
                return false;
        return true;
    }

    static boolean isHumble(int n)
    {   
        for(int i = 2; i <= n; i++)
        {
            if (isPrime(i) && isFactor(n, i))
            {
                System.out.println(i);
                //if(isPresent(i))
                //  return false;
                //else return true;
                return true;

            }
        }
        return false;
    }

    static boolean isFactor(int val1, int val2)
    {
        return val1%val2==0;
    }

    static boolean isPresent(int n){
        for(int val : prime_factors)
            if(n==val)
                return true;
        return false;
    }

// prime_factors {2,3,5,7}

我正在实现一个isHumble函数,但由于某些原因,某些东西似乎已经关闭了。有人可以帮帮我吗?

4 个答案:

答案 0 :(得分:3)

修改

在素数列表中添加1,然后尝试以下操作:

boolean isHumble(int n)
{
    if (isFactor(n)) return true;
    for(int i=2;i<=n/2;i++)
    {
        while(n%i == 0)
            if (isFactor(i))
                n /= i;
            else
                return false;
    }
    return isFactor(n);
}

这样就可以从数字中删除这些因素,而不会在以后找到。

修改2

更简单的解决方案是:

boolean isHumble(int n)
{
    for (int val : prime_factors)
        while (n % val == 0) n /= val;
    return (n == 1);
}

答案 1 :(得分:0)

由于编写isHumble方法的方式,因此编写的isFactor方法会为每个数字返回false ...

答案 2 :(得分:0)

一个不起眼的数字是唯一的素数因子是2,3,5,7。这意味着,如果你把所有“素数”从0到n / 2,只有2,3,5,7应该除以它们。 相反,你将从0到n / 2的所有数字,并检查它们是否是因素。

因此,在你的情况下,当i = 9时,声明 if(n%i == 0)返回true,因此返回false正在执行。

在i上运行你的外循环只有素数而不是从0到n / 2的所有数字,你应该没事。

答案 3 :(得分:0)

您的isFactor方法可以更容易编写为

boolean isFactor(int n){
    return prime_factors.contains(n);
}