Сильно делимое тройное angular число (ProjectEular)? - PullRequest
1 голос
/ 08 мая 2020

Последовательность треугольных чисел создается сложением натуральных чисел. Таким образом, 7-е число треугольника будет 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28. Первые десять членов будут:

1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...

Перечислим множители первых семи чисел треугольника:

1: 1 3: 1,3 6: 1,2,3,6 10: 1,2,5,10 15: 1,3,5,15 21: 1,3,7,21 28: 1,2,4,7,14,28 Мы видим, что 28 - первое число в треугольнике. чтобы иметь более пяти делителей.

Каково значение первого числа треугольника, чтобы иметь более пятисот делителей?

Я сделал это в java с помощью этого кода. Я не вижу никаких ошибок, но он возвращает то значение, которое я присвоил count2. В чем причина?

public static void main(String[] args) {
    System.out.println(number());
}


public static boolean triangle(int number) {
    long sum = 0l;
    for (int i = 0; i < number; i++) {
        sum += i;
        if ((((number + 1) * number) / 2) != sum)
            return false;
    }
    return true;
}


public static int triangular(int number) {
    int count = 0;
    for (int i = 1; i <= number; i++) {
        if (number % i == 0) {
            count++;
        }

    }
    return count;
}

public static String number() {
    int count2 = 1;

    while ((triangle(count2) == true) && (triangular(count2) == 501)) {
        count2++;
    }
    return Integer.toString(count2);
}

1 Ответ

3 голосов
/ 08 мая 2020

Условия вашего while l oop приводят к его досрочному выходу. Вы должны инвертировать условия, чтобы продолжать итерацию, пока эти условия не будут выполнены. Кроме того, число, которое вы получите, может иметь более 501 множителей, поэтому вы должны учитывать эту возможность.

while ((triangle(count2) == false) || (triangular(count2) < 501)) {
    count2++;
}

Как упоминалось в комментарии Дэвида Конрада к исходному сообщению, вы должны суммировать свои числа треугольников из От 1 до n в triangle() или просто используйте явную формулу для вычисления tri angular чисел .

Ваш подход также может выиграть от использования сита .

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