Ist die Zahl x integer oder double?
-
Das geht sicher einfacher, wenn du mit ganzen Zahlen arbeitest (Teilbarkeit kannst du per Modulo-Operator feststellen). (außerdem: Wenn du bereits einen Faktor gefunden hast, brauchst du nicht weiterzusuchen ;))
-
1. warum ließt du nicht gleich einen Integer ein?
2.bool isPream(int number){ for(int t = 2; t < number; ++t){ if(n%t == 0){ return false; } } return true; }
-
#include <iostream> bool is_prime(unsigned n) { if (n == 2 || n == 3) return true; if(n < 5) return false; for(unsigned i = 5, delta = 2; i * i <= n; i += delta, delta = 6 - delta) if(!(n % i)) return false; return true; } int main() { int mightbeprime; std::cin >> mightbeprime; if(!std::cin) { std::cout << "Ungueltige Eingabe!\n"; return 1; } std::cout << mightbeprime << " ist " << is_prime(mightbeprime) + "keine Primzahl!\n"; return 0; }
-
@314159265358979
Hast du deinen Code mal getestet?
-
Nö. Wenns nicht funktioniert, gut so.
-
Bei deinem Code scheint nämlich jede Zahl eine Primzahl zu sein.

-
314159265358979 schrieb:
Nö. Wenns nicht funktioniert, gut so.
Genau.
Ganz nach deinem Motte: Hauptsache mal wieder Scheisse gepostet.
-
Nö, nach dem Motto: Keine Komplettlösungen.

Motten sind übrigens cool.
-
#include <iostream> #include <string> using namespace std; inline bool is_prime(const unsigned n) { for(unsigned a=2;a<n;a++) if(!(n%a)) return false; return true; } int main(void) { cout<<"Bitte Zahl eingeben: "; unsigned a; cin>>a; string res=(is_prime(a))?"Diese Zahl ist eine Primzahl!": "Nein, diese Zahl ist keine Primzahl."; cout<<res<<endl; }So korrekt
?
-
Hacker schrieb:
...
Wie wärs mit ohne String?
int main(void) { cout<<"Bitte Zahl eingeben: "; unsigned a; cin>>a; cout << "Die Zahl ist " << is_prime(a)?"":"k" << "eine Primzahl." <<endl; }
-
Wie wärs mit ohne ?: ?
-
FreakY<3Cpp schrieb:
Bei deinem Code scheint nämlich jede Zahl eine Primzahl zu sein.

Außer 0, 1 und 4.
Naja, das Testprogramm ist schlimm.
Besser sowasint main() { for(int i=0;i<100;++i) if(is_prime(i)) cout<<i<<' '; return 0; }
-
Hacker schrieb:
#include <iostream> #include <string> using namespace std; inline bool is_prime(const unsigned n) { for(unsigned a=2;a<n;a++) if(!(n%a))// meint if(n%a==0) return false; return true; } int main(void) { cout<<"Bitte Zahl eingeben: "; unsigned a; cin>>a; string res=(is_prime(a))?"Diese Zahl ist eine Primzahl!": "Nein, diese Zahl ist keine Primzahl."; cout<<res<<endl; }So korrekt
?Ja, fast. 0 und 1 sind keine Primzahlen. Sonst alles gut.
-
Dann so:
inline bool is_prime(const unsigned n) { short counter=0; for(unsigned a=1;a<=n;a++) if(!(n%a)) ++counter; return counter == 2; }Edit:
Wie wärs mit ohne String?
Geht bei mir gar nicht, wenn ich den ternären Operator einsetze bekomm' ich was zu hören:
error: invalid operands of types 'const char [5]' and '<unresolved overloaded function type>' to binary 'operator<<'
-
Hacker schrieb:
Geht bei mir gar nicht, wenn ich den ternären Operator einsetze bekomm' ich was zu hören:
Ich habe die Klammern um
is_prime(a)?"":"k"vergessen.
-
Golfi1812 schrieb:
Was haltet ihr davon? Es gibt sicherlich auch noch andere Wege, welcher gefällt euch am besten?
Mfg Golfi1812
Das ist schonmal (sehr) lang. Kürzer:
#include "../../../std_lib_facilities.h" #include <conio.h> bool test(double n){ return !(floor(n) == ceil(n)); } int main() { bool i; double n, r, t(1); int x = 0; cout<<"Die zutestende Zahl:"; cin>>n; cout<<endl; while(t<=n){ r = n/t; i = test(r); if(i==0) ++x; ++t; } if(x==2) cout<<n<<" ist eine Primzahl!"; else cout<<n<<" ist keine Primzahl!"; getch(); }Ich verurteile natürlich neimanden, denn das ist Geschmackssache. Aber so wirds übersichtlicher, finde ich.
-
[Rewind] schrieb:
Hacker schrieb:
Geht bei mir gar nicht, wenn ich den ternären Operator einsetze bekomm' ich was zu hören:
Ich habe die Klammern um
is_prime(a)?"":"k"vergessen.Dann auch nicht.
-
Hacker schrieb:
Dann so:
inline bool is_prime(const unsigned n) { short counter=0; for(unsigned a=1;a<=n;a++) if(!(n%a)) ++counter; return counter == 2; }Geht.
Aber es gibt oft noch einen geileren Trick, um so ein paar (hier nur zwei) Ausnahmen abzufangen. ein if vor alles setzen für die Sonderfälle.PIs komischer Code von Fehlern bereinigt (Kahlschlag):
bool is_prime(unsigned n) { //testet nur die Teiler 5,7, 11,13, 17,19... for(unsigned i = 5, delta = 2; i * i <= n; i += delta, delta = 6 - delta) if(n%i==0) return false; return true; }Ausgabe: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 26 27 28 29 31 32 33 34 36 37 38 39 41 42 43 44 46 47 48 51 52 53 54 57 58 59 61 62 64 66 67 68 69 71 72 73 74 76 78 79 81 82 83 86 87 88 89 92 93 94 96 97 99
Klar, die 2 und 3 als Teiler wurden gar nicht probiert. Einzelbehandlung für diese Ausnahmen kann davorgeschraubt werden.
bool is_prime(unsigned n) { if(n%2==0 || n%3==0) return false; //testet nur die Teiler 5,7, 11,13, 17,19... for(unsigned i = 5, delta = 2; i * i <= n; i += delta, delta = 6 - delta) if(n%i==0) return false; return true; }Ausgabe: 1 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
Schon krass gut. Nur noch Fehler bei 1, 2 und 3
Noch eine Ausnahmebehandlung davorschrauben.
bool is_prime(unsigned n) { if(n<=3) { static bool nachschau[4]={false,false,true,true}; return nachschau[n]; } if(n%2==0 || n%3==0) return false; //testet nur die Teiler 5,7, 11,13, 17,19... for(unsigned i = 5, delta = 2; i * i <= n; i += delta, delta = 6 - delta) if(n%i==0) return false; return true; }Ausgabe: 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
Scheint zu stimmen.
Damit läßt sich Dein
bool is_prime(const unsigned n) { for(unsigned a=2;a<n;a++) if(!(n%a))// meint if(n%a==0) return false; return true; }auch prima reparieren.
bool is_prime(const unsigned n) { if(n<2) return false; for(unsigned a=2;a<n;a++) if(!(n%a))// meint if(n%a==0) return false; return true; }
-
Hacker schrieb:
[Rewind] schrieb:
Hacker schrieb:
Geht bei mir gar nicht, wenn ich den ternären Operator einsetze bekomm' ich was zu hören:
Ich habe die Klammern um
is_prime(a)?"":"k"vergessen.Dann auch nicht.
So muss es funktionieren:
cout << "Die Zahl ist " << (is_prime(a)?"":"k") << "eine Primzahl." <<endl;Klammern falsch gesetzt gehabt?
-
Hacker schrieb:
bool test(double n){ return !(floor(n) == ceil(n)); }Ich verurteile natürlich neimanden, denn das ist Geschmackssache. Aber so wirds übersichtlicher, finde ich.
Ich verurteile Dich, übersehen zu haben, daß !(==) eigentlich != ist.
bool test(double n){ return floor(n) != ceil(n); }