Java >> Tutoriel Java >  >> Java

Programme de nombres proniques en Java

Dans cet article, nous développerons un programme Java pour vérifier si le nombre donné est le nombre pronique ou non. Plus tard, nous développons également un programme Java pour trouver tous les nombres proniques dans une plage donnée.

Un nombre pronique est un nombre qui est le produit de deux entiers consécutifs, c'est-à-dire un nombre de la forme n(n + 1) . Le nombre pronique est également appelé nombres oblongs, nombres hétéroméciques ou nombres rectangulaires.

Les premiers nombres Pronic sont ::- 0, 2, 6, 12, 20, 30, 42, 56, 72, 90, 110, 132, 156, 182, 210, 240, 272, 306, 342, 380, 420 , 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)

De ces exemples, nous pouvons conclure que lorsque nombre =n*(n+1) alors n sera toujours inférieur à la racine carrée du nombre. Nous pouvons utiliser cette conclusion pour développer le programme Java pour le nombre pronique.

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();
   }
}

La sortie pour les différents cas de test :-

Entrez un nombre entier ::12
12 est un nombre pronique

Entrez un nombre entier ::15
15 n'est pas un nombre pronique

La complexité temporelle du programme ci-dessus est O(√n) .

Voir également :- Numéro spécial, Numéro magique, Numéro Armstrong, Numéro parfait, Numéro maléfique, Numéro espion, Numéro ensoleillé en Java

Moyen efficace de vérifier le nombre pronique

Nous pouvons également utiliser une approche efficace avec moins de complexité temporelle. Nous pouvons observer que tous les nombres proniques qui sont représentés par n*(n+1), pour ces nombres les valeurs n et n+1 sont très proches de la racine carrée du nombre. Une observation plus correcte conduira au fait qu'un nombre N ne peut être représenté comme le produit de deux entiers consécutifs que si le produit de floor(sqrt(N)) et floor(sqrt(N))+1 est égal à 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();
   }
}

La complexité temporelle de ce programme est O(log(log n)) .

Programme Java pour trouver tous les nombres proniques dans la plage donnée

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();
   }
}

La sortie pour les différents cas de test est :-

Entrer la valeur min de la plage ::1
Entrer la valeur max de la plage ::100
Les nombres proniques de 1 à 100 sont ::
2 6 12 20 30 42 56 72 90

Entrez la valeur minimale de la plage : 100
Entrez la valeur maximale de la plage : 1000
Les nombres proniques de 100 à 1000 sont : :
110 132 156 182 210 240 272 306 342 380 420 462 506 552 600 650 702 756 812 870 930 992

Propriétés supplémentaires des nombres proniques ,

1) Tous les nombres proniques sont des nombres pairs.
2) 2 est le seul nombre premier qui est aussi un nombre pronique.
3) Le nième nombre pronique est la somme des n premiers nombres pairs.
4) Si 25 est ajouté à la représentation décimale d'un nombre pronique, le résultat est un nombre carré, par ex. 625 =25^2, 1225 =35^2


Balise Java