Java >> Java tutorial >  >> Java

Pronic Number Program i Java

I dette indlæg vil vi udvikle et Java-program til at kontrollere, om det givne tal er pronictal eller ej. Senere udvikler vi også et Java-program til at finde alle proniske tal i et givent område.

Et pronisk tal er et tal, der er produktet af to på hinanden følgende heltal, det vil sige et tal på formen n(n + 1) . Det proniske tal kaldes også aflange tal, heteromeciske tal eller rektangulære tal.

De første par proniske tal er:- 0, 2, 6, 12, 20, 30, 42, 56, 72, 90, 110, 132, 156, 182, 210, 240, 272, 306, 342, 400 , 462 …

 0 = 0 * (0+1)
 2 = 1 * (1+1)
 6 = 2 * (2+1)
12 = 3 * (3+1)
20 = 4 * (4+1)
30 = 5 * (5+1)
42 = 6 * (6+1)
56 = 7 * (7+1)

Ud fra disse eksempler kan vi konkludere, at når tal =n*(n+1), så vil n altid være mindre end kvadratroden af ​​tallet. Vi kan bruge denne konklusion til at udvikle Java-programmet til pronisk tal.

import java.util.Scanner;

public class PronicNumber {

   public static boolean isPronic(int number) {

      int i = 0; // iterator variable

      // loop until square root of the number
      while(i <= (int)Math.sqrt(number)) {

	 if(number == i*(i+1))
	 return true;

	 // increase iterator variable by 1
	 i++;
      }

      return false;
   }

   public static void main(String[] args) {

      // declare variables
      int number = 0;

      // read the input 
      Scanner scan =  new Scanner(System.in);
      System.out.print("Enter an integer number:: ");
      number = scan.nextInt();

      // check the number is Pronic number or not
      if(isPronic(number))
         System.out.println(number+" is a"
              + " pronic number");
      else
         System.out.println(number+" is not a"
             + " pronic number");

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

Output for de forskellige test-cases:-

Indtast et heltal::12
12 er et pronisk tal

Indtast et heltal::15
15 er ikke et pronisk tal

Tidskompleksiteten af ​​ovenstående program er O(√n) .

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

Effektiv måde at kontrollere pronisk nummer

Vi kan også bruge en effektiv tilgang med mindre tidskompleksitet. Vi kan observere, at alle de proniske tal, der er repræsenteret som n*(n+1), for disse tal er n- og n+1-værdien meget tæt på kvadratrodsværdien af ​​tallet. En mere korrekt observation vil føre til, at et tal N kun kan repræsenteres som produktet af to på hinanden følgende heltal, hvis produktet af floor(sqrt(N)) og floor(sqrt(N))+1 er lig med N.

import java.util.Scanner;

public class PronicNumber {

   // method to check pronic number
   public static boolean isPronic(int number) {

      // calculate n value
      int n = (int)Math.sqrt(number);

      // compare n*(n+1) and number
      if( n * (n+1) == number ) 
	return true;

      // else it is not a pronic number
      return false;
   }

   public static void main(String[] args) {

      // declare variables
      int number = 0;

      // read the input 
      Scanner scan =  new Scanner(System.in);
      System.out.print("Enter an integer number:: ");
      number = scan.nextInt();

      // check the number is Pronic number or not
      if(isPronic(number))
      System.out.println(number+" is a"
    		+ " pronic number");
      else
      System.out.println(number+" is not a"
   	  		+ " pronic number");

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

Tidskompleksiteten af ​​dette program er O(log(log n)) .

Java-program til at finde alle proniske tal i det givne område

import java.util.Scanner;

public class PronicNumberInRange {

   // method to check pronic number
   public static boolean isPronic(int number) {

      // calculate n value
      int n = (int)Math.sqrt(number);

      // compare n*(n+1) and number
      if( n * (n+1) == number ) 
	 return true;

      // else it is not a pronic number
      return false;
   }

   public static void main(String[] args) {

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

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

      // read inputs
      System.out.print("Enter min value of range:: ");
      minRange = scan.nextInt();
      System.out.print("Enter max value of range:: ");
      maxRange = scan.nextInt();

      // find all Pronic number
      System.out.println("The pronic numbers from "+
		minRange+" to "+ maxRange+" are:: ");

      for(int i=minRange; i<=maxRange; i++) {
          if(isPronic(i))
          System.out.print(i+" ");
      }

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

Outputtet for de forskellige testcases er:-

Indtast min. værdi for interval::1
Indtast maks. værdi for interval::100
De proniske tal fra 1 til 100 er::
2 6 12 20 30 42 56 72 90

Indtast min. værdi for interval::100
Indtast maks. værdi for interval::1000
De proniske tal fra 100 til 1000 er::
110 132 156 182 210 240 272 306 342 380 420 462 506 552 600 650 702 756 812 870 930 992

Yderligere egenskaber for de proniske tal ,

1) Alle proniske tal er lige tal.
2) 2 er det eneste primtal, der også er et pronisk tal.
3) Det n. proniske tal er summen af ​​det første n lige tal.
4) Hvis der tilføjes 25 til decimalrepræsentationen af ​​et pronisk tal, er resultatet et kvadrattal, f.eks. 625 =25^2, 1225 =35^2


Java tag