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 |