Java程序检查给定数字是否为完美数
当给定数字的因子之和(去除给定数字本身)等于该数字本身时,称为完美数。这些约数的和称为真约数和。因此,如果一个数与其真约数和相等,则该数是完美数。值得注意的是,所有已知的完美数都是偶数。
问题陈述
在这篇文章中,我们将创建Java程序来检查给定数字是否为完美数。对于给定的问题,我们将使用迭代方法,例如for循环和while循环。让我们通过一些例子来理解:
输入1
Given number: 496
输出1
Its factors are: 1, 2, 4, 8, 16, 31, 62, 124, and 248 ( we have to exclude 496 )
Sum of the factors are: 1 + 2 + 4 + 8 + 16 + 31 + 62 + 124 + 248 = 496
Therefore, it is a perfect number
输入2
Given number: 54
输出2
Its factors are: 1, 2, 3, 6, 9, 18, and 27 ( we have to exclude 54 )
Sum of the factors are: 1 + 2 + 3 + 6 + 9 + 18 + 27 = 66
Therefore, it is not a perfect number
检查完美数的方法
以下是我们可以用来检查给定数字是否为完美数的一些方法:
使用For循环检查完美数
for循环是入口控制循环,其中执行给定条件。
语法
for ( initial expression; conditional expression; increment/decrement expression ) { // code to be executed }
初始表达式 - 循环开始时执行一次。
条件表达式 - 直到条件表达式为真时才会执行代码。
增量/减量表达式 - 用于增量/减量循环变量。
使用for循环检查给定数字是否为完美数的步骤
以下是使用for循环检查给定数字是否为完美数的步骤:
- 从java.util包导入类。
- 声明并初始化一个整数变量n1表示要检查的数字,另一个整数变量add用于存储其因子的和。
- 使用一个for循环,从1运行到n1 - 1。
- 在循环内,使用if语句检查n1是否可以被当前循环变量整除。
- 如果可以整除,则将循环变量添加到add中。
- 循环结束后,使用if-else块检查add是否等于n1。
示例
import java.util.*; public class Perfect { public static void main(String[] args) { int n1 = 496; int add = 0; for(int i = 1; i < n1; i++) { if(n1 % i==0) { add = add + i; // adding and incrementing } } boolean isPerfect = (add == n1); if(isPerfect) { System.out.println("is " + n1 + " a perfect number?: " + isPerfect); } else { System.out.println("is " + n1 + " a perfect number?: " + isPerfect); } } }
输出
is 496 a perfect number?: true
使用While循环检查完美数
while循环是入口控制循环,在执行循环体之前检查条件。
语法
while (conditional expression) { // code will be executed till conditional expression is true increment/decrement expression; // to increment or decrement loop variable }
使用while循环检查给定数字是否为完美数的步骤
以下是使用while循环检查给定数字是否为完美数的步骤:
- 从java.util包导入类。
- 声明并初始化一个整数变量n1表示要检查的数字,另一个整数变量add用于存储其因子的和。
- 声明一个循环变量i并将其设置为1。
- 使用一个while循环,只要i小于n1就运行。
- 在循环内,使用if语句检查n1是否可以被i整除。如果可以整除,则将i添加到add中。
- 将i递增1。循环结束后,使用if-else块检查add是否等于n1。
示例
import java.util.*; public class Main { public static void main(String[] args) { int n1 = 28; int add = 0; int i = 1; // loop variable while(i < n1) { if(n1 % i == 0) { add = add + i; } i++; // incrementing } boolean isPerfect = (add == n1); if(isPerfect) { System.out.println("is " + n1 + " a perfect number?: " + isPerfect); } else { System.out.println("is " + n1 + " a perfect number?: " + isPerfect); } } }
输出
is 28 a perfect number?: true
在上面的程序中,我们遵循相同的逻辑,但使用了不同的变量n1值,并且使用了while循环而不是for循环。
循环到n/2检查完美数
这种方法比我们在本文前面讨论的另外两种方法更优化。在这种方法中,循环将仅迭代到给定数字的一半,因为我们可以在该数字的一半之间找到该数字的所有因子(不包括数字本身)。
迭代到n/2检查给定数字是否为完美数的步骤
以下是迭代到n/2检查给定数字是否为完美数的步骤:
- 声明并初始化一个整数变量n1表示要检查的数字,另一个整数变量add用于存储其因子的和。
- 声明一个循环变量i并将其设置为1。
- 使用while循环,只要i小于或等于n1 / 2就运行。
- 在循环内,使用if语句检查n1是否可以被i整除。如果可以整除,则将i添加到add中。将i递增1。
- 循环结束后,使用if-else块检查add是否等于n1。
示例
import java.util.*; public class Perfect { public static void main(String[] args) { int n1=6; int add = 0; int i=1; while(i <= n1/2) { // loop will run till 3 ( 6/2 = 3) if(n1 % i==0) { add = add + i; } i++; } boolean isPerfect = (add == n1); if(isPerfect) { System.out.println("is " + n1 + " a perfect number?: " + isPerfect); } else { System.out.println("is " + n1 + " a perfect number?: " + isPerfect); } } }
输出
is 6 a perfect number?: true
结论
在这篇文章中,我们看到了三种Java程序方法来检查给定数字是否为完美数。我们了解了如何使用迭代方法来编写Java程序。方法3更优化,我们推荐使用这种方法。