Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question#include <iostream> #include <vector> #include <ctime> int prem(int n) { // calcul du n-ième nombre premier int i, k, m, d, s, x; std::vector<int> p; if(n == 1) return 2; if(n == 2) return 3; if(n == 3) return 5; p.push_back(2); p.push_back(3); p.push_back(5); // pour : p[0]=2, p[1]=3, p[2]=5, p[3]=7, etc. x = 5; k = 3; s = 4; m = 1 + (int)sqrt(double(n)); while(k < m) { // pour x : 7, 11, 13, 17, 19, 23, 25, etc. // ce qui évite les multiples de 2 et 3 s = 6 - s; x = x + s; d = 5; i = 2; while((d*d <= x) && (x%d != 0)) d = p[i++]; // quand tous les diviseurs d éventuels ont été // essayés, alors x est premier si : d*d > x if(d*d > x) { p.push_back(x); k++; } } while(k < n) { s = 6 - s; x = x + s; d = 5; i = 2; while((d*d <= x) && (x%d != 0)) d = p[i++]; if(d*d > x) k++; } return x; } void main() { int n = 1; for(int i=0; i<8; i++) { clock_t start = clock(); std::cout << "prem(" << n << ") : " << prem(n) << " en : "; std::cout << double(clock()-start)/double(CLOCKS_PER_SEC) << " s" << std::endl; n = n * 10; } }