Primes.cc 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. // O(sqrt(x)) Exhaustive Primality Test
  2. bool IsPrimeSlow (LL x)
  3. {
  4. if(x<=1) return false;
  5. if(x<=3) return true;
  6. if (!(x%2) || !(x%3)) return false;
  7. LL s=(LL)(sqrt((double)(x))+EPS);
  8. for(LL i=5;i<=s;i+=6)
  9. {
  10. if (!(x%i) || !(x%(i+2))) return false;
  11. }
  12. return true;
  13. }
  14. // sieve
  15. const int maxn = 10000005;
  16. const int maxp = 700000;
  17. int vis[maxn]; //0 for prime number
  18. int prime[maxp];
  19. void sieve(int n){
  20. int m = (int)sqrt(n+0.5);
  21. memset(vis, 0, sizeof(vis));
  22. for (int i = 2; i <= m, i++) if (!vis[i])
  23. for (int j = i*i; j <= n; j += i) vis[j] = 1;
  24. }
  25. int gen_primes(int n) {
  26. sieve(n);
  27. int c = 0;
  28. for (int i = 2; i <= n; i++) if (!vis[i])
  29. prime[c++] = i;
  30. return c;
  31. }
  32. // Primes less than 1000:
  33. // 2 3 5 7 11 13 17 19 23 29 31 37
  34. // 41 43 47 53 59 61 67 71 73 79 83 89
  35. // 97 101 103 107 109 113 127 131 137 139 149 151
  36. // 157 163 167 173 179 181 191 193 197 199 211 223
  37. // 227 229 233 239 241 251 257 263 269 271 277 281
  38. // 283 293 307 311 313 317 331 337 347 349 353 359
  39. // 367 373 379 383 389 397 401 409 419 421 431 433
  40. // 439 443 449 457 461 463 467 479 487 491 499 503
  41. // 509 521 523 541 547 557 563 569 571 577 587 593
  42. // 599 601 607 613 617 619 631 641 643 647 653 659
  43. // 661 673 677 683 691 701 709 719 727 733 739 743
  44. // 751 757 761 769 773 787 797 809 811 821 823 827
  45. // 829 839 853 857 859 863 877 881 883 887 907 911
  46. // 919 929 937 941 947 953 967 971 977 983 991 997
  47. // Other primes:
  48. // The largest prime smaller than 10 is 7.
  49. // 100 is 97.
  50. // 1000 is 997.
  51. // 10000 is 9973.
  52. // 100000 is 99991.
  53. // 1000000 is 999983.
  54. // 10000000 is 9999991.
  55. // 100000000 is 99999989.
  56. // 1000000000 is 999999937.
  57. // 10000000000 is 9999999967.
  58. // 100000000000 is 99999999977.
  59. // 1000000000000 is 999999999989.
  60. // 10000000000000 is 9999999999971.
  61. // 100000000000000 is 99999999999973.
  62. // 1000000000000000 is 999999999999989.
  63. // 10000000000000000 is 9999999999999937.
  64. // 100000000000000000 is 99999999999999997.
  65. // 1000000000000000000 is 999999999999999989.