Java >> Java tutorial >  >> Java

Perfekt nummer program i Java

I dette indlæg vil vi udvikle et Java-program til at kontrollere, om tallet er et perfekt tal eller ej. Vi vil forsøge at udvikle en metode, som vil give høj ydeevne, og vi vil også udvikle et Java-program til at finde alle perfekte tal, der hører til et givet område.

Perfekt nummer :- Et tal, hvis faktorer summer undtagen sig selv, er lig med det samme tal, kaldes et perfekt tal.

Eksempel:- 6
Faktorer på 6 (undtagen sig selv) er 1,2,3.
Summen af ​​disse faktorer 1+2+3 =6 Så 6 er et perfekt tal.

Et andet eksempel:- 28
Faktorer på 28 (undtagen sig selv) er 1, 2, 4, 7, 14
Summen af ​​faktorer på 28 =1+2+4+7+14 =28
Derfor er 28 er også et perfekt tal.

Logik til at kontrollere det perfekte tal i Java

1) Tag et tal
2) Tag en variabel sum_of_factors og initialiser den med 0
3) find faktorerne for tallet (undtagen sig selv)
4) Tilføj faktorerne i variablen sum_of_factors
5) Hvis sum_of_factors er lig med input (antal), så er det et perfekt tal

Java-kode til det perfekte nummer

Vi skal finde faktoren undtagen for sig selv, så det er en bedre idé kun at iterere løkken for antal/2 gange, for hvis vi udelukker tallet, vil alle faktorer af tallet være mindre end eller lig med halvdelen af ​​tallet . For eksempel:- Bortset fra sig selv er faktorerne 10 1, 2 og 5. De er alle mindre end eller lig med halvdelen af ​​tallet 10, dvs. 10/2=5

// Check the number is perfect number or not
public static boolean isPerfect(int number) {

   // declare variables
   int sum_of_factors = 0;

   // find factors of the number
   for(int i=1; i<= number/2; i++)
       if(number%i == 0)
           // add factor in sum_of_factors
           sum_of_factors += i; 

   // compare sum_of_factors and number
   if (sum_of_factors == number)
       return true; // perfect number
   return false; // not a perfect number
}

Se også:- Specialnummer, Magisk nummer, Armstrong-nummer, Perfekt nummer, Evil Number, Spionnummer, Sunny-nummer i Java

Java-program til at kontrollere det perfekte tal

Baseret på ovenstående metode kan vi skrive et Java-program for at kontrollere, at det givne tal er et perfekt tal eller ej.

import java.util.Scanner;

public class PerfectNumber {

   // Check the number is perfect number or not
   public static boolean isPerfect(int number) {

      // declare variables
      int sum_of_factors = 0;

      // find factors of the number
      for(int i=1; i<= number/2; i++)
          if(number%i == 0)
             // add factor in sum_of_factors
             sum_of_factors += i; 

      // compare sum_of_factors and number
      if (sum_of_factors == number)
          return true; // perfect number

      return false; // not a perfect number
   }

   public static void main(String[] args) {

      // declare variables
      int number = 0;
      boolean result = false;

      //create Scanner class object to take input
      Scanner scan = new Scanner(System.in);

      // take input from end-user
      System.out.print("Enter an integer number:: ");
      number = scan.nextInt();

      // check number is perfect number or not
      result = isPerfect(number);
      if(result)
          System.out.println(number +
                  " is a perfect number.");
      else
          System.out.println(number +
                  " is not a perfect number");

      // close Scanner class object
      scan.close();
   }
}

Outputtet af de forskellige test-cases:-

Indtast et heltal::6
6 er et perfekt tal.

Indtast et helt tal::12
12 er ikke et perfekt tal

Indtast et heltal::28
28 er et perfekt tal.

Optimering

Dette program afhænger helt af at finde faktorer af antallet. Vi bør skrive sådan en kode, der finder faktorer (undtagen sig selv) og giver bedre ydeevne til at finde faktorerne.

I det forrige indlæg find faktorer af et tal, har vi diskuteret, hvordan man skriver en metode til at finde faktorer af et tal hurtigt og give bedre ydeevne. I nedenstående metode brugte vi det.

// check the number is perfect number or not
public static boolean isPerfect(int num) {

   // declare variables
   int sum_of_factors = 0;

   // find factors of the number
   for(int i=1; i&lt;= Math.sqrt(num); i++) {

      // if number is divisible by i
      if(num % i == 0) {
         sum_of_factors += i;

         // don't add number itself
         // and sqrt(num) second times
         if( (i != 1) && ((num/i) != Math.sqrt(num)) ){

            // add factor in sum_of_factors
            sum_of_factors += (num/i);
         }
      }
   }

   // compare sum_of_factors and number
   return (sum_of_factors == num);
}

For at kontrollere det perfekte tal bør vi ikke tilføje selve tallet, så ovenstående metode tilføjer ikke (num/i) værdi, når tallet i==1 fordi num/i vil give num dvs. num/1 =num

På samme måde bør vi ikke tilføje sqrt(num) værdien for anden gang. Hvis sqrt(num) er faktoren for tallet, vil det blive tilføjet til sum_of_digits, fordi num%i ==0. Men num/i vil også give det samme tal, og det skal tilføjes i sum_of_factors. Derfor havde vi skrevet betingelsen som,

/* Except number itself
 * and sqrt(num) add remaining factors 
 * which is greater than sqrt(num) 
 */

if( (i != 1) && ((num/i) != Math.sqrt(num)) ){
   // add factor in sum_of_factors
   sum_of_factors += (num/i);
}

Vi vil bruge denne optimerede løsning til at finde det perfekte tal i et givent område.

Java-program til at finde det perfekte tal i et område

Ved hjælp af loops kan vi finde alle perfekte tal, der hører til et givet område.

import java.util.Scanner;

public class PerfectNumberInRange {

   // Check the number is perfect number or not
   public static boolean isPerfect(int num) {

      // declare variables
      int sum_of_factors = 0;

      // find factors of the number
      for(int i=1; i<= Math.sqrt(num); i++) {
        if(num % i == 0) {
          sum_of_factors += i;

          // don't add number itself
          // and sqrt(num) second times
          if( (i != 1) && ((num/i) != Math.sqrt(num)) ){
             // add remaining factors
             sum_of_factors += (num/i);
          }
        }
      }

      // compare sum_of_factors and number
      return (sum_of_factors == num);
   }

   public static void main(String[] args) {

      // declare variables
      int minRange = 0, maxRange = 0;

      // create Scanner class object &amp; read inputs
      Scanner scan = new Scanner(System.in);
      System.out.print("Enter min value of range:: ");
      minRange = scan.nextInt();
      System.out.print("Enter max value of range:: ");
      maxRange = scan.nextInt();

      // check number 
      System.out.println("The perfect numbers from "+
             minRange+" to "+ maxRange+" are:: ");
      for(int i=minRange; i<=maxRange; i++) {
          if(isPerfect(i))
             System.out.print(i+" ");
      }

      // close Scanner class object
      scan.close();
   }
}

Output for de forskellige test-cases:-

Indtast min. værdi for interval::0
Indtast maks. værdi for interval::100
De perfekte tal fra 0 til 100 er::
0 1 6 28

Indtast min. værdi for interval::1
Indtast maks. værdi for interval::1000
De perfekte tal fra 1 til 1000 er::
1 6 28 496

Indtast min. værdi for interval::100
Indtast maksimumværdi for interval::1000000
De perfekte tal fra 100 til 1000000 er::
496 8128


Java tag