mein primzahlprogramm will keine großen zahlen :/
-
also hier (nochmal) der code
#include <iostream> #include <math.h> using namespace std; int findPrim(double at, double n) { return n==2? 2:n<2? -1:at>sqrt(n)? 0:n-(floor(n/at)*at)==0? at:findPrim(at+1, n); } int main() { double pPrim; int res; while(true) { std::cout << "Enter Number" << endl; std::cin.clear(); std::cin.ignore(std::cin.rdbuf()->in_avail()); std::cin >> pPrim; if(!std::cin.fail()) { res = findPrim(2, pPrim); if(res == -1) cout << pPrim << " is not a prime" << endl; else if(res == 0) cout << pPrim << " is a prime" << endl; else cout << pPrim << " is not a prime, it can be devided by "<< res << endl; } else { cout << "invalid input!" << endl; } } return 0; }Enter Number
54765675677
5.47657e+010 is not a prime, it can be devided by 19
Enter Number
23434545649898983453457
2.34345e+022 is not a prime, it can be devided by 2 //warum?????
Enter Number
234357
234357 is not a prime, it can be devided by 3
Enter Number
3453457
3.45346e+006 is not a prime, it can be devided by 7
Enter Number
12313487
1.23135e+007 is not a prime, it can be devided by 23
Enter Number
3423569
3.42357e+006 is a prime
Enter Number
-
Primzahlberechnung mit Fliesskommazahlen? Das kann doch gar nicht klappen!
-
double hat nur begrenzte Genauigkeit (afair 8..10 Stellen) - wenn du die überschreitest, werden die Werte auf die nächste darstellbare Zahl gerundet. Wenn du Ganzzahlarithmetik jenseits der Grenzen von long benötigst, brauchst du eine Spezialbiliothek (z.B. GMP).
-
Liegt wohl an dem Genauigkeitsverlust bei Fließkommazahlen.
Wenn du wirklich derart große Zahlen auf ihre Teilbarkeit testen willst kannst du dir vll mal GMP ansehen
EDIT://
CStoll war schneller
-
2.34345e+022 is not a prime, it can be devided by 2 //warum?????
weil die zahl gerade ist

-
oh man ^^
ok danke
pffff auf der gmp seite wird im manual nicht mal die benutzung(installation) unter windows ERWÄHNT oO
toll...ich hab ka wie ich so eine bibliothek compile und dann einbinde

-
Sieh dir doch mal das hier an.
http://www.shoup.net/ntl/
Das geht zumindest einfacher unter Windows.