Square Free Number in Java

2025 年 5 月 7 日 | 阅读 4 分钟

在本节中,我们将讨论什么是无平方数,以及创建 Java 程序来检查给定数字是否为无平方数无平方数程序经常出现在 Java 编码面试和学术中。

无平方数

正整数 n 是一个无平方整数,如果它是不同素数的乘积。换句话说,如果 n 不能被任何素数 p(1 除外)的平方 p2 整除,那么 n 就是无平方整数。它也可以定义为不能被大于 1 的平方整除的数称为无平方数。其素因数分解中,每个出现的素数因子都只出现一次。它在 OEIS 序列中为A005117

Square Free Number in Java

让我们通过示例来理解。

无平方数示例

示例 1:假设我们要检查 72 是否为无平方数。

72 的因子(能整除 72 的数)是:1, 2, 3, 4, 6, 8, 9, 12, 18, 24, 36, and 72

素因子是:2 和 3

在上述因子中,完全平方因子是 4、9 和 36。因子 8、12、24 和 72 能被 4 整除,18 能被 9 整除。因此,因子 4、9 和 36 不能是无平方数。在上述因子中,只剩下三个因子不是完全平方数,即 2、3 和 6,并且它们中的任何一个都不能被完全平方数整除。因此,72 是一个无平方数。

让我们看看另一种查找相同的方法。这种方法比上面的方法稍微容易一些。

示例 2:假设我们要检查 111 是否为无平方数。

72 的因子是:1, 3, 37, and 111

素因子是 3, 37

没有任何因子能被完全平方数整除,也没有任何素因子出现一次以上。因此,111 是一个无平方数。

示例 3:检查 108 是否为无平方数。

首先,我们找到 108 的素因数分解:2 × 2 × 3 × 3 × 3 = 22 × 33

我们注意到素因子出现了不止一次。因此,108不是无平方数。

类似地,我们也可以检查其他数字。

其他一些无平方数是 1、2、3、5、6、7、10、11、13、14、15、17、19、21、22、23、26、29、30、31、33、34、35、37、38、39、41、42、43、46、47、51、53、55、57、58、59、61、62、65、66、67、69、70、71、73、74、77、78、79、82、83、85、86、87、89、91、93、94、95、97、101、102、103、105、106、107、109、110、111、113。

检查无平方数的步骤

  1. 读取或初始化一个数字 N。
  2. 找到 N 的素因子。
  3. 检查素因子是否出现不止一次。
    • 如果任何因子出现不止一次,则给定的数字不是无平方数。
    • 否则,给定的数字是无平方数。

让我们在 Java 程序中实现上述逻辑。

无平方数 Java 程序

SquareFreeNumberExample1.java

输出 1

Enter the number: 113
113 is a square free number.

输出 2

Enter the number: 12
12 is not a square free number.

查找第 n 个无平方数

SquareFreeNumberExample2.java

输出 1

Enter the number: 10
The 10th square free number is: 14

输出 2

Enter the number: 20
The 20th square free number is: 31