3
淘氣數字是其不同素數因子的數目等於其十進制表示中的位數。 數字1被認爲是頑皮的號碼。以下是查找淘氣號碼的代碼。問題是方法的主要因素,它進入了一個無限循環。無法在一個範圍內找到DISTINCT素因子的數量
import java.util.ArrayList;
import java.util.Scanner;
import java.util.TreeSet;
import java.util.Iterator;
public class NaughtyNumber {
ArrayList <Integer> aldecrep = new ArrayList < >(); // use for decimal representation
TreeSet <Integer> tsprimefact = new TreeSet < >(); // use for store of prime factors
ArrayList <Integer> alsize1 = new ArrayList < >(); // use for storing number of prime factors
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int query, ul, dl;
System.out.println("Enter the nuber of queries");
query = in .nextInt();
System.out.println("Enter upperlimit and down limit");
while (query != 0) {
dl = in .nextInt();
ul = in .nextInt();
NaughtyNumber n1 = new NaughtyNumber();
//NaughtyNumber n2=new NaughtyNumber();
//NaughtyNumber n3=new NaughtyNumber();
n1.decal(dl, ul);
n1.primefactor(dl, ul);
n1.compare(dl);
query--;
}
}
//count number of digits
void decal(int dl, int ul) {
for (int i = dl; i <= ul; i++) {
int length = (int)(Math.log10(i) + 1); //calculation of length of a number
aldecrep.add(length);
}
}
//count number of digits ends
//prime factorization starts
void primefactor(int dl, int ul) {
for (int i = dl; i <= ul; i++) {
for (int j = 2; j <= i; j++) {
if (i % j == 0) {
i = i/j;
tsprimefact.add(j); // add distinct prime factors
j--;
}
alsize1.add(tsprimefact.size()); //add treesize to set size1
tsprimefact.clear(); //empty ts
}
}
Iterator <Integer> itr1 = alsize1.iterator();
while (itr1.hasNext()) {
Integer n1 = itr1.next();
System.out.println(n1);
}
}
//prime factorization ends
// compare to find naughty number
void compare(int dl) {
Iterator <Integer> itr = aldecrep.iterator();
Iterator <Integer> itr1 = alsize1.iterator();
int count = 0;
if (dl == 1) {
count = count + 1;
}
while (itr.hasNext() && itr1.hasNext()) {
Integer n1 = itr.next();
Integer n2 = itr1.next();
if (n1 == n2) {
count++;
}
}
System.out.println(count);
}
}
你能解決問題嗎? – Mark
如果我想找到一個單一的質量因子,它的工作原理。但是,我試圖把它放入範圍它進入無限循環。所以我修改了代碼而不是傳遞(dl,ul)我開始傳遞單個值到主因子法。儘管我想知道爲什麼當我傳遞(dl,ul)參數時它會進入無限循環的原因。 – Fawkes