package Maths;import java.util.ArrayList;import java.util.Collections;/*** n 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. *** <p>* link: https://en.wikipedia.org/wiki/Vampire_number *** <p>*/public class 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("" + countofRes + ": = ( " + i + "," + j + " = " + i * j + ")" + "\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 21if (noPseudoVamireNumbers) {if (a * 10 <= b || b * 10 <= a) {return false;}}String mulDigits = splitIntoDigits(a * b, 0);String faktorDigits = splitIntoDigits(a, b);return mulDigits.equals(faktorDigits);}// methode to Split the numbers to Digitsstatic String splitIntoDigits(int num, int num2) {StringBuilder res = new StringBuilder();ArrayList<Integer> digits = new ArrayList<>();while (num > 0) {digits.add(num % 10);num /= 10;}while (num2 > 0) {digits.add(num2 % 10);num2 /= 10;}Collections.sort(digits);for (int i : digits) {res.append(i);}return res.toString();}}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。