diff --git a/src/main/java/com/thealgorithms/maths/VampireNumber.java b/src/main/java/com/thealgorithms/maths/VampireNumber.java index 8820f8a23f70..45bb9a587778 100644 --- a/src/main/java/com/thealgorithms/maths/VampireNumber.java +++ b/src/main/java/com/thealgorithms/maths/VampireNumber.java @@ -1,78 +1,48 @@ package com.thealgorithms.maths; import java.util.ArrayList; -import java.util.Collections; /** - * n number theory, a vampire number (or true vampire number) is a composite + * In number theory, a vampire number (or true vampire number) is a composite * natural number with an even number of digits, that can be factored into two * natural numbers each with half as many digits as the original number and not * both with trailing zeroes, where the two factors contain precisely all the * digits of the original number, in any order, counting multiplicity. The first - * vampire number is 1260 = 21 × 60. * + * vampire number is 1260 = 21 × 60. * - *
- * link: https://en.wikipedia.org/wiki/Vampire_number * - * - *
+ * @see Vampire number on Wikipedia
*/
public final class VampireNumber {
+ // Forbid instantiation.
private VampireNumber() {
}
- public static void main(String[] args) {
- test(10, 1000);
- }
-
- static void test(int startValue, int stopValue) {
- int countofRes = 1;
- StringBuilder res = new StringBuilder();
-
- for (int i = startValue; i <= stopValue; i++) {
- for (int j = i; j <= stopValue; j++) {
- // System.out.println(i+ " "+ j);
- if (isVampireNumber(i, j, true)) {
- countofRes++;
- res.append("").append(countofRes).append(": = ( ").append(i).append(",").append(j).append(" = ").append(i * j).append(")").append("\n");
- }
- }
- }
- System.out.println(res);
- }
-
- static boolean isVampireNumber(int a, int b, boolean noPseudoVamireNumbers) {
- // this is for pseudoVampireNumbers pseudovampire number need not be of length n/2 digits
- // for example 126 = 6 x 21
- if (noPseudoVamireNumbers) {
- if (a * 10 <= b || b * 10 <= a) {
- return false;
- }
+ static boolean isVampireNumber(int a, int b, boolean ignorePseudoVampireNumbers) {
+ // Pseudo vampire numbers don't have to be of n/2 digits. E.g., 126 = 6 x 21 is such a number.
+ if (ignorePseudoVampireNumbers && String.valueOf(a).length() != String.valueOf(b).length()) {
+ return false;
}
- String mulDigits = splitIntoDigits(a * b, 0);
- String faktorDigits = splitIntoDigits(a, b);
+ String mulDigits = splitIntoSortedDigits(a * b);
+ String factorDigits = splitIntoSortedDigits(a, b);
- return mulDigits.equals(faktorDigits);
+ return mulDigits.equals(factorDigits);
}
- // methode to Split the numbers to Digits
- static String splitIntoDigits(int num, int num2) {
- StringBuilder res = new StringBuilder();
-
+ // Method to split a pair of numbers to digits and sort them in the ascending order.
+ static String splitIntoSortedDigits(int... nums) {
+ // Collect all digits in a list.
ArrayList