Witam,
od niedawna uczę się programować w Javie. Obecnie rozwiązuję jeden z problemów w projekcie Euler. Trzeba napisać program, który najpierw sprawdzi przez jakie liczby dzieli się bez reszty jakaś duża liczba (przykładowo 13195), a następnie wyświetli tylko te dzielniki, które są liczbami pierwszymi. Na koniec trzeba jeszcze wyświetlić największy z nich, ale z tym już sobie poradzę. Utknąłem jednak wcześniej - przy wyznaczaniu liczby pierwszej. Wklejam swój kod programu:
import java.util.*;
public class NajwCzynnik {
public static void main(String[] args) {
// TODO Auto-generated method stub
List<Integer> tablica = new ArrayList<Integer>();
// Iterator<Integer> itr = tablica.iterator();
int x = 13195;
int y=1;
// int k=2;
while (y<x) {
y=y+1;
if (x%y==0) {
tablica.add(y);
}
}
int n = tablica.size();
System.out.println(tablica);
System.out.println("Dlugosc tablicy to: "+n);
// Tutaj zaczynam sprawdzać, czy kolejna liczba z tablicy jest liczbą pierwszą
Iterator<Integer> itr = tablica.iterator();
while (itr.hasNext()) {
y=1;
Integer number = itr.next();
if (number % 5 == 0) {
itr.remove();
}
}
System.out.print(tablica);
}
}
W obecnym kodzie na koniec sprawdzam i odrzucam wszystkie liczby podzielne przez 5. Program w takiej formie DZIAŁA, ale jak wiadomo liczba pierwsza ma inne właściwości, niż dzielenie przez 5 :) Muszę podzielić ją przez wszystkie liczby mniejsze od jej wartości. Na logikę próbuję użyć tam pętli for, ale trzy dni starań i zero rezultatu :
// Tutaj zaczynam sprawdzać, czy kolejna liczba z tablicy jest liczbą pierwszą
Iterator<Integer> itr = tablica.iterator();
while (itr.hasNext()) {
y=1;
Integer number = itr.next();
for (int i=2;i==number;i++) {
if (number % i == 0) {
itr.remove();
}
}
}
Pętla w takiej formie w ogóle nie działa. Program w ogóle nie wykonuje tej pętli. Co robię nie tak? Nakierujcie mnie i proszę, nie wrzucajcie gotowej odpowiedzi, chcę to zrobić sam, ale utknąłem :(