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更优化,我们推荐使用这种方法。

更新于:2024年8月5日

2K+ 浏览量

开启您的职业生涯

通过完成课程获得认证

开始学习
广告