Advertisement
Guest User

is prime

a guest
Dec 15th, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.77 KB | None | 0 0
  1. //Testa se n é primo com o Teste de Miller na base b. Retorna true se n for
  2. //[pseudo]primo para b.
  3. bool miller(ll n, ll b){
  4.     ll q = n-1, k = 0, r, i = 0;
  5.     while ((q & 1) == 0){
  6.         q >>= 1;
  7.         ++k;
  8.     }
  9.     r = exp_mod(b,q,n);
  10.     if (r == 1) return true;
  11.     while (i < k) {
  12.         if (r == n-1) return true;
  13.         r = produc_mod(r, r, n);
  14.         ++i;
  15.     }
  16.     return false;
  17. }
  18. //Determina se um número é primo usando o teste de Miller para 4 bases
  19. //(determinístico para n < 10^12).
  20. bool isprime(long long n){
  21.     const int n_bases = 4;
  22.     int j, bases[] = {2, 13, 23, 1662803};
  23.     if (n < 0) n = -n;
  24.     if (n <= 1) return false;
  25.     for (j = 0; j < n_bases; ++j) {
  26.         if (n == bases[j]) return true;
  27.         if (n % bases[j] == 0) return false;
  28.         if (!miller(n, bases[j])) return false;
  29.     }
  30.     return true;
  31. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement