Die Zahl herausfinden die durch 2 - 30 Teilbar ist...

Java4win

Aktives Mitglied
hey,

ich möchte die erste Zahl herausfinden welche durch die Zahlen 2 - 30 glatt Teilbar ist.
Jedoch finde ich den Fehler in meinem Programmcode nicht....

Java:
int start = 232000000;
    int all = 0;
   
    while(true){
       
        all = 0;
       
        for (int i = 2; i <= 30; i++){
            all += start%i;           
        }
       
        System.out.println(start);
        if(all == 0){
            break;
        }
        start++;
    }
   
   
    //Lösung ist : 232792560

Leider läuft das Programm über die Lösung drüber...
 
@Java4win
Deine for-Schleife ist nicht deine while-Schleife.
Wann soll den die letztere ein Ende finden?
Schau dir an, was dein Programm macht:
Java:
public class Java4Win
{

    public static void main(String[] args)
    {
        int start = 100;
        int all = 0;

        while (true) {
            all = 0;
            for (int i = 2; i <= 30; i++) {
                all += start % i;
                System.out.println("Variable all: " + all + ", Schritt: " + i);
            }
            System.out.println("Variable start: " + start);
            if (all == 0) {
                break;
            }
            start++;
        }
    }

}
/** Konsolenausgabe */
Variable all: 0, Schritt: 2
Variable all: 1, Schritt: 3
Variable all: 1, Schritt: 4
Variable all: 1, Schritt: 5
Variable all: 5, Schritt: 6
Variable all: 7, Schritt: 7
Variable all: 11, Schritt: 8
Variable all: 12, Schritt: 9
Variable all: 12, Schritt: 10
Variable all: 13, Schritt: 11
Variable all: 17, Schritt: 12
Variable all: 26, Schritt: 13
Variable all: 28, Schritt: 14
Variable all: 38, Schritt: 15
Variable all: 42, Schritt: 16
Variable all: 57, Schritt: 17
Variable all: 67, Schritt: 18
Variable all: 72, Schritt: 19
Variable all: 72, Schritt: 20
Variable all: 88, Schritt: 21
Variable all: 100, Schritt: 22
Variable all: 108, Schritt: 23
Variable all: 112, Schritt: 24
Variable all: 112, Schritt: 25
Variable all: 134, Schritt: 26
Variable all: 153, Schritt: 27
Variable all: 169, Schritt: 28
Variable all: 182, Schritt: 29
Variable all: 192, Schritt: 30
Variable start: 100
//Hier zu zweiter Runde usw...
Wann soll die Variable all den Null werden 😉
 
Wann soll die Variable all den Null werden 😉
Die "all" Variable wird ja immer am Anfang der while Schleife auf 0 gesetzt.
Nun wird die variable "all" erst dann 0 sein, wenn die Variable "start" glatt durch die Zahlen von 2 - 30 teilbar ist.
Also Modulo immer 0 herauskommt.

verstehst du wie ich das meine?
 
Zuletzt bearbeitet:
Die Aufgabe war mir klar, deine Umsetzung habe ich nicht nachvollziehen können, also den Umsetzungsgedanken..

Ich weiß jetzt das mein Programm richtig läuft. Ich dachte nur die Lösung in der Aufgabe wäre die Lösung von den Zahlen 1 - 30 dies war jedoch nicht der Fall, das war lediglich die Lösung von 1 - 20.

schau mal:
Java:
int start = 232000000;

    int all = 0;
 
    while(true){
  
        all = 0;
  
        for (int i = 2; i <= 30; i++){
            all += start%i;      
        }
  
        System.out.println(start);
        if(all == 0){
            break;
        }
        start++;
    }

Wir möchten gerne eine Zahl finden die von 1 - 30 teilbar ist. Diese Zahl ist in dem Programm die variable "start".
Aus diesem Grund läuft die Schleife immer wieder bis 30.
Nun rechnen wir in jedem Schleifendurchlauf die Zahl "start" (also die Zahl bei der wir Testen möchten), ob diese durch die Zahlen 1 - 30 Teilbar ist.
Wenn die Zahl "start" durch alle "i" glatt teilbar ist, dann muss der Rest der immer entsteht 0 sein.
Es wird quasi die ganze Zeit geprüft ob 2 durch "start" Rest 0 ergibt, danach ob 3 durch "start" Rest 0 ergibt und das bis 30....

Wenn die Variable "all" danach immer noch 0 ist, haben wir eine Zahl "start" gefunden die durch alle Zahlen 1 - 30 Teilbar ist und die unendliche while Schleife wird verlassen. Wenn "all" nicht gleich 0 ist wird "start" (die Zahl die wir Prüfen wollen) um 1 erhöht und wir versuchen das ganze noch einmal...

Ich hoffe ich konnte es dir jetzt besser erklären....
 
Darf ich es sehen?
Natürlich hier:
Java:
int start = 232792400;
    int all = 0;

    while(true){

        all = 0;

        for (int i = 2; i <= 20; i++){
            all += start%i;
        }
        
        System.out.println("all Variable: " + all);
        System.out.println("start variable: " + start);

        if(all == 0){
            break;
        }
        start++;
    }

Die Angegebene Lösung (232792560) ist nur für die Zahlen 1 - 20 gültig aus diesem Grund habe ich die Schleife nur bis 20 laufen lassen🙂
 
Einen effizienteren Algorithmus erhält man, indem man sich die Primfaktorzerlegung anschaut. Man muss nur dafür sorgen, dass alle Primfaktoren von 2...30 in der Lösung enthalten sind. Man kann also einfach die PFZ der Zahlen 2..30 berechnen und die maximale Häufigkeit jeder Primzahl in das Ergebnis mit aufnehmen.
 

Neue Themen


Zurück
Oben