Treść zadania:
Liczbą półpierwszą nazywamy taką liczbę, która jest iloczynem dwóch liczb pierwszych. Sprawdź czy podana liczba w reprezentacji binarnej jest liczbą półpierwszą.
Tu jest moja metoda która powinna to sprawdzać
static boolean checkIfIsSemiFirstNumber(String str) {
int decNum = Integer.parseInt(str, 2); // zamiana na dziesietna liczbe
List<Integer> primeNumbers = new ArrayList<>();
// generowanie liczb pierwszych
for (int i = 1; i <= decNum ; i++) {
int counter = 0;
for (int j = 1; j <= i; j++) {
if (i % j == 0) counter++;
}
if (counter == 2) primeNumbers.add(i);
}
// sprawdzanie
for (int i=0; i<primeNumbers.size(); i++) {
for (int j = 0; j < primeNumbers.size() ; j++){
if (primeNumbers.get(i)*primeNumbers.get(j) == decNum) return true;
}
}
return false;
}
W rozwiązaniu chodziło mi o to, żeby wygenerować listę liczb pierwszych od 1 do n i następnie mnożąc wszystkie przez wszystkie sprawdzić czy któraś para jest równa sprawdzanej liczbie. Nie uznałbym tego rozwiązania za seksowne ale powinno działać, a nie mogę znaleźć tutaj błędu.