Недублированные делители / сумма делителей - PullRequest
0 голосов
/ 23 февраля 2020

У меня проблема с программой, которая генерирует два числа в диапазоне 100-999 для переменной a и b . Генератор случайных чисел должен ломаться, когда число b больше a . Мне нужно
а) проверить, сколько общих недублированных делителей получили эти числа
б) вывести сумму делителей, которые не являются общими, как переменные a и b
У меня уже есть код, который генерирует меня var a, b (с большим b ), и я подумал, что у меня есть также l oop, которые предоставляют мне делители, но, похоже, что нет .
Что я должен изменить, чтобы обеспечить правильный тип делителей? Или любой из них - потому что это не работает хорошо.

Спасибо за ответ.


public class Ex3 {
    public static void main(String[] args) {
        Random rand = new Random();
        int a,b;
        List<Integer> divider= new ArrayList<Integer>();
        while(true)
        {
            a = rand.nextInt(900) + 100;
            b = rand.nextInt(900) + 100;
            System.out.println(a + "" + b);
            if(b>a) {

                for(int i=2;i<a;i++){
                    if((a % i)==0) divider.add(i); 
                }
                System.out.println(divider.toString());
                for(int i=2;i<a;i++){
                    if((b % i)==0) divider.add(i);
                }
                break;
            }

        }
    }

}

1 Ответ

0 голосов
/ 24 февраля 2020

Я полагаю, что вам нужны все Общие делители , которые можно разделить на каждое из случайно сгенерированных целочисленных значений и не оставить остатка. Делители обычно начинаются с 1 и постепенно (на 1) переходят к случайному значению a и случайному значению b. Конечно, обнаруженные общие делители сохраняются и позже отображаются, когда поиск по делителям выполнен.

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

Итак, пример кода ниже:

  • Генерирует два случайных целых числа значения от 100 (включительно) до 999 (включительно) согласно вашим спецификациям.
  • Гарантирует, что случайное целое значение в переменной b больше, чем случайное целое значение в переменной a. A , в то время как l oop используется исключительно для этой конкретной c цели и только для этой цели. Условие l oop гарантирует, что значение в b должно быть больше значения в a, чтобы выйти из этого l oop.
  • Случайные значения отображаются на консоли.
  • A для l oop используется как для значения в a, так и для значения в b для получения Common Divisors . Обратите внимание, как это делается, обратите особое внимание на раздел terminating (или иначе называемый условием) оператора цикла for . Также обратите внимание на раздел initialization оператора l oop, вы можете видеть, что мы инициализируем целочисленную переменную от i до 1 , а не 2. Любые определенные общие делители хранятся в Объект списка интерфейса с именем commonDivisors. Целочисленная переменная с именем uncommonSum также хранит сумму всех делителей, которые являются необычными, с помощью оператора else в блоке кода l oop.
  • Общие делители отображаются на консоли окно. Вы заметите, что 1 всегда является общим делителем. Это имеет смысл только потому, что любое число, деленное на единицу, будет равно этому числу без остатка.
  • Наконец, для / каждого l oop используется для суммирования общих делителей, содержащихся в commonDivisors Список и результат помещаются в переменную Integer с именем commonDivisorsSum, которая затем отображается в окне консоли.

Пример вывода в окно консоли может выглядеть следующим образом:

Random Numbers:   --> A: 848 | B: 976
Common Divisors:  --> [1, 2, 4, 8, 16]
Common Div Sum:   --> 31
UnCommon Div Sum: --> 359945

Вот пример кода:

int a = new Random().nextInt(999 - 100 + 1) + 100;
int b = 0;

// Loop until the random number in b is greater than in a.
while (a >= b) {
    b = new Random().nextInt(999 - 100 + 1) + 100;
}
//Display random generated integer values for A and B.
System.out.println("Random Numbers:  --> A: " + a + " | B: " + b);

// Get Common Divisors between the two random integer values...
List<Integer> commonDivisors = new ArrayList<>();
int uncommonSum = 0;
for(int i = 1; i <= a && i <= b; i++) {
    if(a % i == 0 && b % i == 0) {
        commonDivisors.add(i);
    }
    else {
        uncommonSum += i;
    } 
}
System.out.println("Common Divisors: --> " + commonDivisors);

// Get an display the sum of Common Divisors 
int commonDivisorsSum = 0; 
for (int i : commonDivisors) {
    commonDivisorsSum = commonDivisorsSum + i;
}
System.out.println("Common Div Sum:  --> " + commonDivisorsSum);
System.out.println("UnCommon Div Sum: --> " + uncommonSum);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...