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