Определить делители числа (n), а затем вернуть возможные пары положительных целых чисел, которые при умножении меньше (n)?

В основном, направления идут так:

  1. Введите положительное целое число больше 3 (n)
  2. Программа должна вывести все возможные пары положительных целых чисел больше одного, произведение которых ‹= на введенное число (n)

Вот пример вывода:

Enter an integer: 24
4 = 2 x 2
6 = 2 x 3
8 = 2 x 4
10 = 2 x 5
12 = 2 x 6
14 = 2 x 7
16  = 2 x 8
18 =  2 x 9
22 = 2 x 11
24 = 2 x 12
9 = 3 x 3
12 =  3 x 4
15 = 3 x 5
18 = 3 x 6
21 = 3 x 7
24 = 3 x 8
16 = 4 x 4
20 = 4 x 5
24 = 4 x 6

(Примечание: товары могут появляться более одного раза, но пары не должны)

Для моего решения я начал с определения факторов n следующим образом:

 public static void main(String[] args){
        Scanner keyboard = new Scanner(System.in);
        int factors = 0;

        System.out.println("Enter integer:");
        int n = keyboard.nextInt();

            for(int i = 2; i <=n ; i++) {
                if(n % i == 0) {
                    System.out.println(i);
                  }
               }

Оттуда, кажется, я должен вытащить каждый фактор и умножить его на приращенную переменную, начиная с 2, пока он не будет равен или превысит (n). Я начал думать, что, может быть, это неправильно, поэтому вместо этого я попробовал что-то вроде этого:

    Scanner keyboard = new Scanner(System.in);

    System.out.println("Enter integer:");
    int n = keyboard.nextInt();

    int index = 2;
    int multiplier = 2;
    int result = 0;
    while(result < n) {
        result = multiplier * index;
        System.out.println(result);
        index++;
    }

Что работает, но только для result 4 - 24, поскольку множитель никогда не увеличивает два 3. Является ли фактическое решение просто гибридом этих возможных решений? Руководство в правильном направлении будет оценено, спасибо!


person bgb102    schedule 16.03.2017    source источник
comment
Не беспокойтесь о факторах n. Просто найдите числа, которые умножаются на произведение меньшее, чем n.   -  person Code-Apprentice    schedule 16.03.2017


Ответы (2)


Я думаю, что ваш текущий подход отключен, и, в частности, отсутствует один критический элемент для решения этой проблемы: двойной цикл. Я думаю, что самый простой способ справиться с этим - дважды зациклиться и сгенерировать все пары, соответствующие требованиям.

int number = 24;

for (int i=2; i < (int)Math.ceil(Math.sqrt(number)); ++i) {
    for (int j=i; j <= number / 2; ++j) {
        int pair = i * j;
        if (pair <= number) {
            System.out.println(pair + " = " + i + " x " + j);
        }
    }
}

Сложность здесь заключалась в определении границ для двух циклов for. Вторая переменная цикла начинается со значения первой и может достигать половины входного числа. Это связано с тем, что самая широкая пара будет иметь место, когда первое число будет 2, заставляя второе число быть введенным вдвое. Границы первого цикла немного сложнее. Мы использовали потолок квадратного корня в качестве границ, потому что максимальное значение, которое может быть, будет иметь место, когда оба числа одинаковы.

person Tim Biegeleisen    schedule 16.03.2017
comment
Наивно, вы можете просто зацикливаться до n. - person Code-Apprentice; 16.03.2017
comment
@Code-Apprentice Да, но это было бы расточительно (не знаю, будет ли это вообще заметно). - person Tim Biegeleisen; 16.03.2017
comment
Конечно, меньший лимит на ваши циклы уменьшит постоянный коэффициент эффективности выполнения. Не уверен, насколько это важно как для сокращения времени выполнения, так и, что более важно, для выполнения домашнего задания. - person Code-Apprentice; 16.03.2017

Попробуйте что-нибудь вроде этого.

    Scanner keyboard = new Scanner(System.in);

    System.out.print("Enter integer: ");
    int n = keyboard.nextInt();

    for (int i = 2; i <= n / 2; i++) {
        for (int j = 2; i * j <= n; j++) {
            System.out.println(i + " x " + j + " = " + (i * j));
        }
    }

Результат следующий.

Enter integer: 24
2 x 2 = 4
2 x 3 = 6
2 x 4 = 8
2 x 5 = 10
2 x 6 = 12
2 x 7 = 14
2 x 8 = 16
2 x 9 = 18
2 x 10 = 20
2 x 11 = 22
2 x 12 = 24
3 x 2 = 6
3 x 3 = 9
3 x 4 = 12
3 x 5 = 15
3 x 6 = 18
3 x 7 = 21
3 x 8 = 24
4 x 2 = 8
4 x 3 = 12
4 x 4 = 16
4 x 5 = 20
4 x 6 = 24
5 x 2 = 10
5 x 3 = 15
5 x 4 = 20
6 x 2 = 12
6 x 3 = 18
6 x 4 = 24
7 x 2 = 14
7 x 3 = 21
8 x 2 = 16
8 x 3 = 24
9 x 2 = 18
10 x 2 = 20
11 x 2 = 22
12 x 2 = 24
person Channa Jayamuni    schedule 16.03.2017