Task: | Finding inverse |
Sender: | bielaltes |
Submission time: | 2024-11-16 19:25:12 +0200 |
Language: | C++ (C++11) |
Status: | READY |
Result: | ACCEPTED |
test | verdict | time | |
---|---|---|---|
#1 | ACCEPTED | 0.00 s | details |
#2 | ACCEPTED | 0.00 s | details |
#3 | ACCEPTED | 0.00 s | details |
#4 | ACCEPTED | 0.00 s | details |
#5 | ACCEPTED | 0.00 s | details |
#6 | ACCEPTED | 0.00 s | details |
#7 | ACCEPTED | 0.00 s | details |
#8 | ACCEPTED | 0.00 s | details |
#9 | ACCEPTED | 0.00 s | details |
#10 | ACCEPTED | 0.00 s | details |
#11 | ACCEPTED | 0.00 s | details |
#12 | ACCEPTED | 0.00 s | details |
#13 | ACCEPTED | 0.00 s | details |
#14 | ACCEPTED | 0.00 s | details |
Compiler report
input/code.cpp: In function 'long long int fastpow(long long int, long long int, long long int)': input/code.cpp:9:15: warning: suggest parentheses around comparison in operand of '&' [-Wparentheses] 9 | if (n & 1 == 1) | ~~^~~~ input/code.cpp: In function 'void sieve_of_Eratosthenes(std::vector<long long int>&)': input/code.cpp:17:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare] 17 | for (int x = 2; x < sieve.size(); x++) { | ~~^~~~~~~~~~~~~~ input/code.cpp:19:29: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare] 19 | for (int u = 2*x; u < sieve.size(); u += x) sieve[u] = x; | ~~^~~~~~~~~~~~~~
Code
#include <bits/stdc++.h> using namespace std; long long fastpow(long long x, long long n, long long mod) { if (n == 0) return 1; if (n & 1 == 1) return x * fastpow(x, n-1, mod) % mod; long long halfpow = fastpow(x, n/2, mod) % mod; return halfpow*halfpow % mod; } void sieve_of_Eratosthenes(vector<long long>& sieve) { fill(sieve.begin(), sieve.end(), 0); for (int x = 2; x < sieve.size(); x++) { if (sieve[x]) continue; for (int u = 2*x; u < sieve.size(); u += x) sieve[u] = x; } } list<long long> primes_factors(long long n) { vector<long long> sieve(n+1); sieve_of_Eratosthenes(sieve); list<long long> primes; long long p; while (n > 1) { p = sieve[n]; if (p == 0) { primes.push_front(n); break; } primes.push_front(p); n /= p; } return primes; } int phi(int n) { int result = n; for(int p = 2; p * p <= n; ++p) { if (n % p == 0) { while (n % p == 0) n /= p; result -= result / p; } } if (n > 1) result -= result / n; return result; } bool are_coprimes(long long a, long long b) { return fastpow(a, phi(b), b) == 1; } int main() { long long a, M; cin >> a >> M; long long phiM = phi(M); if (fastpow(a, phiM, M) != 1) { cout << -1 << endl; return 0; } cout << fastpow(a, phiM-1, M) << endl; return 0; }
Test details
Test 1
Verdict: ACCEPTED
input |
---|
6 7 |
correct output |
---|
6 |
user output |
---|
6 |
Test 2
Verdict: ACCEPTED
input |
---|
0 7 |
correct output |
---|
-1 |
user output |
---|
-1 |
Test 3
Verdict: ACCEPTED
input |
---|
5 78 |
correct output |
---|
47 |
user output |
---|
47 |
Test 4
Verdict: ACCEPTED
input |
---|
89 99 |
correct output |
---|
89 |
user output |
---|
89 |
Test 5
Verdict: ACCEPTED
input |
---|
0 61 |
correct output |
---|
-1 |
user output |
---|
-1 |
Test 6
Verdict: ACCEPTED
input |
---|
897 947 |
correct output |
---|
625 |
user output |
---|
625 |
Test 7
Verdict: ACCEPTED
input |
---|
419 538 |
correct output |
---|
217 |
user output |
---|
217 |
Test 8
Verdict: ACCEPTED
input |
---|
32 938 |
correct output |
---|
-1 |
user output |
---|
-1 |
Test 9
Verdict: ACCEPTED
input |
---|
184120 505187 |
correct output |
---|
438779 |
user output |
---|
438779 |
Test 10
Verdict: ACCEPTED
input |
---|
264601 885661 |
correct output |
---|
360221 |
user output |
---|
360221 |
Test 11
Verdict: ACCEPTED
input |
---|
40310 590135 |
correct output |
---|
-1 |
user output |
---|
-1 |
Test 12
Verdict: ACCEPTED
input |
---|
202254499 577081420 |
correct output |
---|
128866679 |
user output |
---|
128866679 |
Test 13
Verdict: ACCEPTED
input |
---|
539836073 888851205 |
correct output |
---|
797044652 |
user output |
---|
797044652 |
Test 14
Verdict: ACCEPTED
input |
---|
697847215 756971670 |
correct output |
---|
-1 |
user output |
---|
-1 |