Cod sursa(job #2034000)

Utilizator Alexandru05Giurgea Alexandru Alexandru05 Data 7 octombrie 2017 12:46:48
Problema Invers modular Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
#include <fstream>
#include <vector>

using namespace std;

ifstream fin("inversmodular.in");
ofstream fout("inversmodular.out");

int fi_totientE(int n)
{
	int fi=0;
	for(int i=n;i>1;i--)
	{
		if(n%i!=0)
		{
			fi++;
		}
	}
	return fi;
}

int expMn(int b,int e,int m)
{
	if(e==0)
	{
		return 1;
	}
	else
	{
		int put=b%m;
		b%=m;
		for(int i=1;i<e;i++)
		{
			put*=b;
			put%=m;
		}
		return put;
	}
}

int main()
{
	int a,n;
	fin>>a>>n;
	vector <bool > vPrime(n+1,true);
	for(int i=2; i<=n; i++)
	{
		int a=i;
		if(vPrime[i])
		{
			while(a+i<=n)
			{
				vPrime[a+i]=false;
				a+=i;
			}
		}
	}
	if(vPrime[n])
	{
		fout<<expMn(a,n-2,n);
	}
	else
	{
		fout<<expMn(a,fi_totientE(n)-1,n);
	}
    return 0;
}