确定一个数 (n) 的因数,然后 return 可能的正整数对相乘时小于 (n)?

Determine factors of a number (n), then return possible pairs of positive integers that when multiplied together are less than (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,因为乘数永远不会递增 2 3. 实际解决方案是否只是这些可能解决方案的混合体?不胜感激,谢谢!

我认为您当前的方法是错误的,尤其是缺少解决此问题的一个关键要素:双循环。我认为最简单的处理方法是循环两次并生成所有符合要求的对。

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 时,将出现最宽的对,迫使第二个数字成为输入的一半。第一个循环的边界有点复杂。我们使用平方根的上限作为界限,因为当两个数字相同时,它可能会达到最大。

尝试这样的事情。

    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