fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <chrono>
  4. #include <cassert>
  5. #include <cmath>
  6.  
  7. using namespace std;
  8.  
  9. const int primeLimit = 10000000;
  10.  
  11. int powm(int base, int exp, int mod) {
  12. assert(exp > 0);
  13. int64_t y=1, x=base%mod;
  14. for (exp%=mod; exp>1; exp >>= 1) {
  15. if (exp&1)
  16. y = x*y %mod;
  17. x = x*x%mod;
  18. }
  19. return x*y%mod;
  20. }
  21. int gcd(int a, int b) {
  22. return !b ? a : gcd(b, a%b);
  23. }
  24.  
  25. int main()
  26. {
  27. cout << "Carmichael Numbers:" << endl << endl;
  28.  
  29. ////////////////////////// Generate primes lookup table ///////////////////////////////////////////////////////////
  30.  
  31. vector<int> prime_list;
  32. vector<bool> primes(primeLimit + 1, true); // calculated primes
  33. primes[0] = primes[1] = false;
  34. int iMax = (int)sqrt((double)primeLimit) + 1;
  35. for (int i = 2; i < iMax; ++i)
  36. if (primes[i]) {
  37. prime_list.push_back(i);
  38. for (int j = 2 * i; j < primeLimit + 1; j += i)
  39. primes[j] = false; // Erastothenes sieve
  40. }
  41.  
  42. ////////////////////////// Fermat's little theorem ///////////////////////////////////////////////////////////////
  43.  
  44. auto start_time = chrono::high_resolution_clock::now();
  45.  
  46. for (int p = 2; p <= primeLimit; ++p) {
  47. if (primes[p])
  48. continue;
  49. bool ok=true;
  50.  
  51. for (int a : prime_list) {
  52. if (a >= p)
  53. break;
  54. if (gcd(a,p)==1 && powm(a, p - 1, p) != 1) {
  55. ok=false;
  56. break;
  57. }
  58. }
  59.  
  60. if (!ok)
  61. continue;
  62.  
  63. auto end_time = chrono::high_resolution_clock::now();
  64. cout << p;
  65. cout << "\ttime: " << chrono::duration_cast<chrono::milliseconds>(end_time - start_time).count() << " ms" << endl;
  66. }
  67. }
Time limit exceeded #stdin #stdout 5s 4684KB
stdin
Standard input is empty
stdout
Carmichael Numbers:

561	time: 0 ms
1105	time: 0 ms
1729	time: 1 ms
2465	time: 1 ms
2821	time: 2 ms
6601	time: 4 ms
8911	time: 6 ms
10585	time: 7 ms
15841	time: 11 ms
29341	time: 22 ms
41041	time: 31 ms
46657	time: 36 ms
52633	time: 41 ms
62745	time: 49 ms
63973	time: 51 ms
75361	time: 61 ms
101101	time: 83 ms
115921	time: 97 ms
126217	time: 106 ms
162401	time: 139 ms
172081	time: 148 ms
188461	time: 164 ms
252601	time: 224 ms
278545	time: 249 ms
294409	time: 264 ms
314821	time: 284 ms
334153	time: 303 ms
340561	time: 310 ms
399001	time: 368 ms
410041	time: 379 ms
449065	time: 418 ms
488881	time: 458 ms
512461	time: 483 ms
530881	time: 502 ms
552721	time: 523 ms
656601	time: 629 ms
658801	time: 632 ms
670033	time: 643 ms
748657	time: 725 ms
825265	time: 805 ms
838201	time: 819 ms
852841	time: 835 ms
997633	time: 988 ms
1024651	time: 1017 ms
1033669	time: 1028 ms
1050985	time: 1047 ms
1082809	time: 1080 ms
1152271	time: 1153 ms
1193221	time: 1197 ms
1461241	time: 1486 ms
1569457	time: 1607 ms
1615681	time: 1656 ms
1773289	time: 1829 ms
1857241	time: 1923 ms
1909001	time: 1981 ms
2100901	time: 2199 ms
2113921	time: 2213 ms
2433601	time: 2566 ms
2455921	time: 2591 ms
2508013	time: 2651 ms
2531845	time: 2678 ms
2628073	time: 2789 ms
2704801	time: 2875 ms
3057601	time: 3280 ms
3146221	time: 3386 ms
3224065	time: 3472 ms
3581761	time: 3883 ms
3664585	time: 3982 ms
3828001	time: 4171 ms
4335241	time: 4767 ms
4463641	time: 4916 ms