os dejo un algoritmo para encontrar el inverso de a módulo n cuando mcd(a,n)=1.
/// <summary>
/// Algoritmo extendido de Euclides
/// </summary>
/// <returns>devuelve x tal que ax mod n=1, donde "0<a<n" ></returns>
static private int algoritmo(int a, int n)
{
List<int> g=new List<int>();
g.Add(n); g.Add(a);
List<int> u = new List<int>();
List<int> v = new List<int>();
u.Add(1); v.Add(0);
u.Add(0); v.Add(1);
int i = 1;
while (g[i] != 0)
{
//g[i] = u[i] * n + v[i] * a;
int y = g[i - 1] / g[i];
g.Add(g[i - 1] - y * g[i]);
u.Add(u[i - 1] - y * u[i]);
v.Add(v[i - 1] - y * v[i]);
i++;
}
int x = v[i - 1];
if (x > 0)
{ return x; }
else { return x + n; }
}
No hay comentarios:
Publicar un comentario