Zabrałem się za kolejny programik i znów komplikacje :)
Musze znaleźć najmniejszą liczbę dodatnią całkowitą, która będzie się dzielić przez 1, 2, 3, ..., 20.
public class ProjectEuler5 {
public static void main(String[] args) {
boolean bool = true;
int liczba = 1;
while (bool) {
int zm = 0;
for (int i = 11; i <= 20; i++) {
if (liczba % i == 0) {
zm++;
}
else
continue;
}
if (zm == 20) {
System.out.print(liczba);
bool = false;
}
else
liczba++;
}
}
}
Niby błędów nie ma i jak dodam wypisywanie aktualnie sprawdzanej liczby i maksymalnego zm to coś tam mieli. Jednak zrezygnowałem po 10 minutach mielenia, jak mi program doszedł do liczby 17.218.491 :) Maksymalne zm było 19, a więc już pewnie nie dużo zostało. Ale tak czy siak, coś musi być nie halo, bo pewnie Wy jesteście w stanie zrobić to w 1 sekundę :)
Na początku sprawdzałem od 1 do 20, jednak przemyślałem to i tak na prawdę wystarczy sprawdzić (tak mi się wydaje) jedynie liczby od 11 do 20.
Jeżeli jakaś liczba dzieli się przed 20 to będzie się dzielić też przez 2,4,5,10, jeśli przez 18 to również przez 3,6,9, 16 i 14 to 8 i 7. No i jak wiadomo każda liczba dzieli się przez 1. Przez to wyeliminowałem liczby 1-10 i na pewno skróciłem czas obliczeń, ale nadal są to minuty...
Jak ktoś ma pomysł to niech coś podpowie, tylko bez gotowców i kodów :) Co robię nie tak, że czas obliczeniowy jest tak tragiczny.