[英]Greatest common divisor in java using prime factorizations
int a;
int b;
int iloscA = 0;
int iloscB = 0;
ArrayList liczbyPierwszeA = new ArrayList();
ArrayList liczbyPierwszeB = new ArrayList();
Scanner liczba = new Scanner(System.in);
System.out.println("Podaj a.");
a = liczba.nextInt();
System.out.println("Podaj b");
b = liczba.nextInt();
int a1 = a;
int b1 = b;
for (int i = 2; i <= a; i++) {
while (a % i == 0) {
// System.out.print(i + "*");
liczbyPierwszeA.add(iloscA, i);
iloscA++;
a = a / i;
}
}
int x = 0;
System.out.print("Rozkład na czynniki pierwsze liczby " + a1 + "=");
while (x < liczbyPierwszeA.size()) {
System.out.print(liczbyPierwszeA.get(x) + "*");
x++;
}
for (int i = 2; i <= b; i++) {
while (b % i == 0) {
// System.out.print(i + "*");
liczbyPierwszeB.add(iloscB, i);
iloscB++;
b = b / i;
}
}
System.out.println("");
int y = 0;
System.out.print("Rozkład na czynniki pierwsze liczby " + b1 + "=");
while (y < liczbyPierwszeB.size()) {
System.out.print(liczbyPierwszeB.get(y) + "*");
y++;
}
int licznik = 0;
ArrayList Wspolne = new ArrayList();
int WspolneLicznik = 0;
while (liczbyPierwszeA.get(licznik) == liczbyPierwszeB.get(licznik)) {
Wspolne.add(WspolneLicznik, liczbyPierwszeA.get(licznik));
licznik++;
WspolneLicznik++;
}
System.out.println("");
int z = 0;
while (z < Wspolne.size()) {
System.out.print(Wspolne.get(z) + "*");
z++;
}
}
}
Soory需要大量代碼,但想發布到目前為止的所有內容。 素數分解很好用,現在我想比較兩個數組列表並找到共同的元素。 但是例如36和48
Rozkład na czynniki pierwsze liczby 36=2*2*3*3*
Rozkład na czynniki pierwsze liczby 48=2*2*2*2*3*
2*2*
如您所見,它無法正常工作,結果應該是2 * 2 * 3,而不是2 * 2。 如何在整個arraylist中找到常見的數字序列,而不是像我的代碼現在那樣在arraylist的開頭查找?
您的while循環僅找到兩個列表的公共前綴。 為了找到所有公共元素,您需要使用兩個索引遍歷兩個List
:
int indexA = 0;
int indexB = 0;
while (indexA < liczbyPierwszeA.size () && indexB < liczbyPierwszeB.size()) {
if (liczbyPierwszeA.get(indexA) == liczbyPierwszeB.get(indexB)) {
Wspolne.add(WspolneLicznik, liczbyPierwszeA.get(indexA));
indexA++;
indexB++;
WspolneLicznik++; // not sure what this counter is for. I kept it just
// in case it's needed
} else {
if (iczbyPierwszeA.get(indexA) < liczbyPierwszeB.get(indexB))
indexA++;
else
indexB++;
}
}
我假設兩個List
的數字都按升序排序,我認為這是一個正確的假設(如果我正確理解了您的代碼)。
編輯:
還要更改要參數化的列表的聲明:
ArrayList<Integer> liczbyPierwszeA = new ArrayList<Integer>();
ArrayList<Integer> liczbyPierwszeB = new ArrayList<Integer>();
甚至更好:
List<Integer> liczbyPierwszeA = new ArrayList<Integer>();
List<Integer> liczbyPierwszeB = new ArrayList<Integer>();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.