|
|
@ -1,19 +1,23 @@ |
|
|
#include <stdio.h>
|
|
|
#include <stdio.h>
|
|
|
|
|
|
#include <chrono>
|
|
|
|
|
|
#include <iostream>
|
|
|
typedef long long unsigned llu; |
|
|
typedef long long unsigned llu; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bool isPrime(int n) |
|
|
bool isPrime(int n) |
|
|
{ |
|
|
{ |
|
|
if ( n == 2 || n == 3 ) |
|
|
|
|
|
|
|
|
if ( n == 2 || n == 3 ) { |
|
|
return true; |
|
|
return true; |
|
|
else if ( n%2 == 0 || n%3 == 0) |
|
|
|
|
|
|
|
|
} else if ( n%2 == 0 || n%3 == 0 ) { |
|
|
return false; |
|
|
return false; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
long unsigned i=5, o=0, m=3; |
|
|
long unsigned i=5, o=0, m=3; |
|
|
while ( n != 1 && 0 < n && i < n/m ) |
|
|
while ( n != 1 && 0 < n && i < n/m ) |
|
|
{ |
|
|
{ |
|
|
if ( n%i == 0 ) |
|
|
|
|
|
|
|
|
if( n%i == 0 ) { |
|
|
return false; |
|
|
return false; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
m = i; |
|
|
m = i; |
|
|
if( i%6 == 5 ) { |
|
|
if( i%6 == 5 ) { |
|
|
@ -28,7 +32,7 @@ bool isPrime(int n) |
|
|
|
|
|
|
|
|
llu repMod(const llu a, const llu p) |
|
|
llu repMod(const llu a, const llu p) |
|
|
{ |
|
|
{ |
|
|
if (p == 0) return 1; |
|
|
|
|
|
|
|
|
if( p == 0 ) { return 1; } |
|
|
|
|
|
|
|
|
llu e = p; |
|
|
llu e = p; |
|
|
llu rem = 1; |
|
|
llu rem = 1; |
|
|
@ -42,7 +46,7 @@ llu repMod(const llu a, const llu p) |
|
|
rem *= c; |
|
|
rem *= c; |
|
|
rem %= p; |
|
|
rem %= p; |
|
|
|
|
|
|
|
|
if (--e == 0) return rem; |
|
|
|
|
|
|
|
|
if( --e == 0 ) { return rem; } |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
c *= c; |
|
|
c *= c; |
|
|
@ -77,6 +81,8 @@ void isBAPP(int a, int p) |
|
|
int main() |
|
|
int main() |
|
|
{ |
|
|
{ |
|
|
int p, a; |
|
|
int p, a; |
|
|
|
|
|
|
|
|
|
|
|
auto t_start = std::chrono::high_resolution_clock::now(); |
|
|
while(1) |
|
|
while(1) |
|
|
{ |
|
|
{ |
|
|
scanf("%d %d\n", &p, &a); |
|
|
scanf("%d %d\n", &p, &a); |
|
|
@ -85,4 +91,10 @@ int main() |
|
|
// Calc.
|
|
|
// Calc.
|
|
|
isBAPP(a, p); |
|
|
isBAPP(a, p); |
|
|
} |
|
|
} |
|
|
|
|
|
auto t_stop = std::chrono::high_resolution_clock::now(); |
|
|
|
|
|
|
|
|
|
|
|
auto duration = std::chrono::duration_cast<std::chrono::nanoseconds>(t_stop - t_start); |
|
|
|
|
|
|
|
|
|
|
|
std::cout << "Duration: " << duration.count() << std::endl; |
|
|
} |
|
|
} |
|
|
|
|
|
|