Cod sursa(job #2639859)
| Utilizator | Data | 4 august 2020 12:35:07 | |
|---|---|---|---|
| Problema | Invers modular | Scor | 100 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva educationala | Marime | 0.61 kb |
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ifstream fin("inversmodular.in");
ofstream fout("inversmodular.out");
ll A, N, mod;
ll phi(ll n){
ll ans=n;
for(ll i=2;i*i<=n;i++){
if(n%i==0)
{
ans=ans/i*(i-1);
while(n%i==0) n/=i;
}
}
if(n!=1)
ans=ans/n*(n-1);
return ans;
}
ll put(ll n, ll p){
ll ans=1;
while(p>0){
if(p%2==1)
ans=(ans*n)%mod;
n=(n*n)%mod;
p/=2;
}
return ans;
}
int main()
{
fin>>A>>N;
mod=N;
ll p=phi(N)-1;
ll sol=1;
fout<<put(A,p);
return 0;
}
