0 Daumen
1,1k Aufrufe

Hallo Zusammen! :)

Ich bin gerade an einem Programm dran, und ich muss erstmal aus einer Liste natürlicher Zahlen die Primzahlen ausgeben:

Idee:

 "Die Zahl i ist teilbar durch 1 (Also Rest 0).

i%1 == 0

Es sag jedoch nichts aus über andere Teiler. Folglich spuckt es mir wieder alle natürlichen Zahlen aus. 

Lösung
Ich will aber sagen, dass die Zahl i nur und alleine durch 1 teilbar ist, 

In Worten: i ist nicht teilbar durch eine Zahl ungleich Null: 

i%!1 == 0

Aber das sieht mir aber nicht so funktionstüchtig aus.

Frage
Kann mir jemand helfen ?

Avatar von

1 Antwort

0 Daumen
i%1 == 0

Das gilt immer. Jede Zahl ist durch \(1\) teillbar (deshalb ist diese Bedingung in Deinem Programm auch nie falsch).

Du musst prüfen, ob für alle Zahlen j von 2 bis maximal i-1 (hier kannst Du Dir überlegen, wie viel Du tatsächlich brauchst) auch die Bedingung i%j!=0 erfüllt ist. Beim ersten false ist Schluss.

Es wäre katastrophal, wenn die Welt so einfach wäre wie in Deinem Vorschlag i%!1 == 0 wäre.

Avatar von

Also mein ziel ist es, die Primzahlen auszugeben


und ich will eigentlich selber draufkommen.


Die Primzahlen haben die Eigenschaft, dass sie natürliche Zahlen n sind, welche


(n „teilbar durch“ 1 && „teilbar durch“ n)


Also zuerst hatte ich als Bedingung


(i%1==0 && i/i=1)


Aber das zeigte keine Wirkung.


Die andere Idee später wäre gewesen, wenn ich sage dass

„i modulo 1 Rest 0“

bedeutet dies, dass i geteilt durch 1 immer i selbst ergibt. Folglich wollte ich es umformen und sagen okay:


(i%1 == 0 && i% Alle Zahlen ausser die nicht 1 sind ergeben keinen Rest 0)


So hätte ich alle Zahlen die zusätzlich zur 1 noch andere Teiler haben eliminiert.

Vielleicht funktioniert die Bedingung:


Alle Zahlen die durch 1 teilbar sind mit Rest 0 && Alle Zahlen die durch sich selbst teilbar sind = 1 Rest 0 &&  !(Alle zahlen die durch alle Zahlen ungleich 1 teilbar sind mit Rest 0) && (i != 0)

Wie wäre es denn mit einer while-Schleife?

Ist die eigentliche Aufgabe aus ProjectEuler.net?

ja genau. Das problem ist aus projecteuler. (Problem 3)


Ich hab es mal glaub ich geschafft oder fast geschafft gestern am morgen und dann fing an mein xcode zu spinnen.

Es gab mir immer fehler aus ich hatte aber eine while schleife und innerhalb dieser while schleife verschiedene if.


Und dann wollte ich die Bedingungen in den if schleife alle in die oberste while-schleife rein tun um weniger Zeilen Code zu haben.


Aber ab dann fing das chaos an und es spuckte mir unbekannte fehler aus, ich dachte ich darf keine zu lange zusammengesetzte bedingungen in der While-Schleife haben.

Und nach vielem Probieren, habe ich hier gefragt.

Ich glaube ich habe aber ein stärkeres semantisches Problem mit dieser Aufgabe.

in den if schleife

Es gibt keine 'If-Schleife'.

Ja. Genau, aber ich wollte sagen dass ich alle Argumente aus den if-Verzweigungen in die zusammengefasst habe und in die While-Schleife gelegt habe, dass jedoch hatte auf die ausgegebenen Zahlen keinen Effekt weil ich alle natürlichen Zahlen so herausbekam.

Also mein Programm (C++, keine Laufzeitoptimierung) löst das Problem über eine while-Schleife und eine if-else-Verzweigung.

Hmm kannst du mir einen hint für die Bedingungen geben ?

long long int n=600851475143 ;
int main() {
  long long int a=2 ;
  long long int b=n ;
// (...)
Davon bin ich ausgegangen. Dann habe ich bei passender Gelegenheit über eine if-else-Verzweigung innerhalb einer while-(a<b)-Schleife entweder den Divisor a inkrementiert oder den Dividenden b durch a dividiert und nach Ende der Schleife das Ergebnis a ausgegeben.

Die long-long-int-Deklarationen sind hier erforderlich, damit kein Überlauf entsteht.

Primzahllisten habe ich nicht erzeugt und das Programm könnte sicher schneller laufen, aber ich habe ja einen schnellen Rechner.

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community