000
29.01.2007, 18:32 Uhr
Suba Esel
|
Ich habe eine Sache, die mich sehr wundert:
C++: |
#include <iostream>
inline bool isprime(unsigned long long int n) { if(n==2) return 1; if(n<3||n%2==0) return 0; for(int i=3;i*i<=n;i+=2) // unsigned long long int i=3 if(n%i==0) return 0; return 1; }
int main() { unsigned long long int zahl; std::cout << "Bei welcher Zahl soll ueberprueft werden, ob sie eine Primzahl ist?" << std::endl; std::cin >> zahl; int alt = time(0); if (isprime(zahl)) std::cout << zahl << " ist eine Primzahl." << std::endl; else std::cout << zahl << " ist keine Primzahl." << std::endl; int neu = time(0); std::cout << neu - alt << " Sekunden."; std::cin.sync(); std::cin.get(); }
|
Wenn ich int i = 3 nehme, braucht das Programm bei 1234567898765432111 ~0 Sekunden. Wenn ich dagegen unsigned long long int i = 3 nehme, etwa 30. Woran liegt das? Und warum funktioniert das Programm auch mit int, dann müsste es doch eigentlich einen Buffer overrung geben, sodass es falsche Ergebnisse gibt, oder?
Ok, waren doch zwei Sachen -- Simon |