Pagini recente » Cod sursa (job #2453753) | Cod sursa (job #1619766) | Cod sursa (job #1620065) | Cod sursa (job #3031696) | Cod sursa (job #2293274)
#include <iostream>
#include <stdio.h>
#include <vector>
#include <math.h>
using namespace std;
int pow(long long int baza, long long int exp){
int rasp=1;
while(exp>0){
if(exp%2==1)
rasp*=baza;
baza*=baza;
exp/=2;
}
return rasp;
}
int powmod(long long int baza, long long int exp, int mod){
int rasp=1;
while(exp>0){
if(exp%2==1)
rasp=(rasp*baza)%mod;
baza=(baza*baza)%mod;
exp/=2;
}
return rasp;
}
int main() {
FILE *fin, *fout;
int i, lim, expo, phi, cop, prim, doi, cop2, x, cn;
long long int a, n;
vector <pair<int,int>> div;
fin = fopen("inversmodular.in", "r");
fout = fopen("inversmodular.out", "w");
fscanf(fin,"%lld%lld", &a, &n);
lim=sqrt(a);
cn=n;
for(i=2;i<=n;i++){
if(n%i==0){
expo=0;
do{
expo++;
if(n%i==0)
n/=i;
}while(n%i==0);
div.push_back({i, expo});
}
}
phi=1;
for(i=0;i<div.size();i++){
phi*=(div[i].first-1)*pow(div[i].first, div[i].second-1);
}
x=powmod(a, phi-1, cn);
fprintf(fout,"%d", x);
fclose(fin);
fclose(fout);
return 0;
}