Primteiler-if
-
Wenn eine Zahl nicht prim ist und nicht durch 2, 3, 5 oder 7 teilbar ist, dann ist ihr kleinster Primteiler > 7.
-
SeppJ schrieb:
Wenn eine Zahl nicht prim ist und nicht durch 2, 3, 5 oder 7 teilbar ist, dann ist ihr kleinster Primteiler > 7.
Genau das mein ich! Aber ich möchte möglichst wenige und intelligente Bedingungen ...
Wie mach ich das mit Nicht-Prim, wenn ich eine Funktion habe ....?
Ich mach es so, habe aber dann drei Bedingungen und bin noch nicht mal sicher, ob der 1. Primteiler der Zahl ist.
(i+6)%3 !=0 && (i+6)%5 !=0 && (i+6)%7 !=0 &&
wie kann ich das return false der Funktion in einem If als Bedingung nutzen?
bool prim(int n){ int x; if(n<2) return false; if(n==2) return false; if(n%2==0) return false; for(x=3;x<=sqrt(n);x+=2){ if(n%x==0) return false; } return true; }
-
otto56 schrieb:
wie kann ich das return false der Funktion in einem If als Bedingung nutzen?
Hatten wir die Frage nicht schon mal?
Nur mal aus Neugier: Was soll das ganze überhaupt?
Du musst darauf natürlich nicht antworten. Geheimnisverrat und so...
-
temi schrieb:
otto56 schrieb:
wie kann ich das return false der Funktion in einem If als Bedingung nutzen?
Hatten wir die Frage nicht schon mal?
Nee, kann nicht erinnern ..
temi schrieb:
Nur mal aus Neugier: Was soll das ganze überhaupt?
Wenn du meine Postings durchsiehst, merkst Du, daß ich Zahlenfan bin und heute hab ich freien Tag und dröhne meinem Hobby ...
-
otto56 schrieb:
temi schrieb:
otto56 schrieb:
wie kann ich das return false der Funktion in einem If als Bedingung nutzen?
Hatten wir die Frage nicht schon mal?
Nee, kann nicht erinnern ..
Ich schon:
https://www.c-plusplus.net/forum/343519
Die Frage steht ganz am Anfang und die erste Antwort ist die richtige...
Edit: Außerdem hatte wob ein paar Anmerkungen zu deiner prim() Funktion gemacht, die du wohl geflissenlich überlesen hast. Das kann dazu führen, dass du dir hier richtig gute Freunde machst.
-
Hab Wobs Anregung umgesetzt und es scheint zu Funzen mit einem if-Glied
!isoddprim(i+6) &&
-
.. oder so:
auto const primsLE7 = { 2, 3, 5, 7 }; int i = ...; // ... auto i2 = i + 6; if( i%7 == 0 && !prim(i2) && std::none_of( begin(primsLE7), end(primsLE7), [i2]( int p ) { return i2%p == 0; } ) ) { // Bedingung ist erfüllt ...
Die kleinsten Zahlen, die diese Bedingung erfüllen sind 203=7*29 und 209=11*19. Das
std::none_of
erfodert ein#include <algorithm>
-
Mal weg von der mathematischen Sichtweise: Wenn ich otto56 richtig einschätze, dürfte sein Primzahltest höchstwahrscheinlich sowieso den kleinsten Teiler als Nebenprodukt produzieren. Man müsste diesen Wert nur benutzen.
-
versteh ich nicht, was Du meinst ....
-
otto56 schrieb:
versteh ich nicht, was Du meinst ....
Ja, das dachte ich mir auch schon…
Wie stellst du derzeit fest, ob eine zahl eine Primzahl ist? Ich weiß es schon aus anderen Threads: Indem du systematisch durch immer größer werdende Zahlen teilst. Wenn du dabei einen Teiler findest, dann ist dies auch automatisch der kleinste Teiler der Zahl. Fällt jetzt der Groschen?
-
Ja, daran habe ich schon gedacht, weiß aber nicht, wie ich an das n rankomme. Es ist in einer Funktion ausgelagert, und wohl nur dort gültig ??
-
Man munkelt, dass Funktionen Werte zurückgeben können. Ist aber eher eine unbewiesene Theorie...