Skip to content

Commit 871e4df

Browse files
Add another method to check Pronic number (#5919)
1 parent 1577ec4 commit 871e4df

File tree

2 files changed

+27
-24
lines changed

2 files changed

+27
-24
lines changed

src/main/java/com/thealgorithms/maths/PronicNumber.java

+14
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ private PronicNumber() {
2121
* @return true if input number is a pronic number, false otherwise
2222
*/
2323
static boolean isPronic(int inputNumber) {
24+
if (inputNumber == 0) {
25+
return true;
26+
}
2427
// Iterating from 0 to input_number
2528
for (int i = 0; i <= inputNumber; i++) {
2629
// Checking if product of i and (i+1) is equals input_number
@@ -34,4 +37,15 @@ static boolean isPronic(int inputNumber) {
3437
// equals input_number
3538
return false;
3639
}
40+
41+
/**
42+
* This method checks if the given number is pronic number or non-pronic number using square root of number for finding divisors
43+
*
44+
* @param number Integer value which is to be checked if is a pronic number or not
45+
* @return true if input number is a pronic number, false otherwise
46+
*/
47+
public static boolean isPronicNumber(int number) {
48+
int squareRoot = (int) Math.sqrt(number); // finding just smaller divisor of the number than its square root.
49+
return squareRoot * (squareRoot + 1) == number;
50+
}
3751
}
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,22 @@
11
package com.thealgorithms.maths;
22

3-
import static org.junit.jupiter.api.Assertions.assertFalse;
4-
import static org.junit.jupiter.api.Assertions.assertTrue;
5-
6-
import org.junit.jupiter.api.Test;
3+
import org.junit.jupiter.api.Assertions;
4+
import org.junit.jupiter.params.ParameterizedTest;
5+
import org.junit.jupiter.params.provider.ValueSource;
76

87
public class PronicNumberTest {
98

10-
@Test
11-
void testForPronicNumber() {
12-
// given
13-
int number = 30;
14-
15-
// when
16-
boolean result = PronicNumber.isPronic(number);
17-
18-
// then
19-
assertTrue(result);
9+
@ParameterizedTest
10+
@ValueSource(ints = {0, 2, 6, 12, 20, 30, 42, 110, 272, 380, 420, 1260, 2550})
11+
void testForPronicNumber(final int number) {
12+
Assertions.assertTrue(PronicNumber.isPronic(number));
13+
Assertions.assertTrue(PronicNumber.isPronicNumber(number));
2014
}
2115

22-
@Test
23-
void testForNonPronicNumber() {
24-
// given
25-
int number = 21;
26-
27-
// when
28-
boolean result = PronicNumber.isPronic(number);
29-
30-
// then
31-
assertFalse(result);
16+
@ParameterizedTest
17+
@ValueSource(ints = {1, 4, 21, 36, 150, 2500})
18+
void testForNonPronicNumber(final int number) {
19+
Assertions.assertFalse(PronicNumber.isPronic(number));
20+
Assertions.assertFalse(PronicNumber.isPronicNumber(number));
3221
}
3322
}

0 commit comments

Comments
 (0)