Проверка, является ли число скромным - PullRequest
0 голосов
/ 07 марта 2011
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 ]

3 голосов
/ 07 марта 2011

Редактировать

Добавьте 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);
}
0 голосов
/ 07 марта 2011

Ваш isFactor метод может быть проще записать как

boolean isFactor(int n){
    return prime_factors.contains(n);
}
0 голосов
/ 07 марта 2011

Скромное число - это число, чьи единственные простые множители - 2,3,5,7. Это означает, что если вы берете все «простые числа» от 0 до n / 2, только 2,3,5,7 должны делить их. Вместо этого вы берете все числа от 0 до n / 2 и проверяете, являются ли они факторами.

Следовательно, в вашем случае, когда я = 9, утверждение if (n% i == 0) возвращает значение true и, следовательно, возвращает false, выполняется.

Запустите свой внешний цикл на i только для простых чисел вместо всех чисел от 0 до n / 2, и все будет в порядке.

0 голосов
/ 07 марта 2011

Как написано, ваш isHumble метод будет возвращать false для каждого числа из-за способа написания вашего isFactor метода ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...