📌  相关文章
📜  国际空间研究组织 | ISRO CS 2017 |问题 80(1)

📅  最后修改于: 2023-12-03 15:23:04.253000             🧑  作者: Mango

国际空间研究组织 | ISRO CS 2017 |问题 80

题目描述

给定一个数字n,请你编写一个Java程序,对数字n进行分解并输出所有的因子。

输入格式

一个整数n (2 ≤ n ≤ 10^10)

输出格式

输出n的所有因子,每个因子一行。

示例

输入

12

输出

1
2
3
4
6
12
解题思路

要找到所有n的因子,我们可以枚举从1到n所有的数字,只要这个数字能够被n整除,那么这个数字就是n的一个因子。

对于一些比较大的数字,我们可以考虑进行优化。从1到n枚举所有可能的因子显然太耗时了,我们可以枚举从1到$\sqrt{n}$的所有数字,如果这个数字能够整除n,那么我们就可以知道存在一个比$\sqrt{n}$大的数字也是n的一个因子,我们可以通过n除以这个数字求得。如此一来,我们就可以同时得到n的所有因子了。

参考代码
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        long n = in.nextLong();
        for (long i = 1; i <= Math.sqrt(n); i++) {
            if (n % i == 0) {
                System.out.println(i);
                if (i != n / i) {
                    System.out.println(n / i);
                }
            }
        }
    }
}

代码解释:

我们首先读入一个长整型数字n,然后从1到$\sqrt{n}$枚举所有的数字i,如果n被i整除,那么我们就可以知道存在一个数字n/i也是n的一个因子,我们通过这个方法同时得到了n的所有因子。最后一定要注意存在i=n/i的情况,我们需要去重。