Esempio n. 1
0
long long inverce(long long a, long long m)
{
    long long x=0,y=0;
    long long g=gcdex(a,m,x,y);
    if (g!=1) return 0;
    return x;
}
Esempio n. 2
0
int gcdex(int a, int b, int *x, int *y) {
	if (a == 0) {
		*x = 0; *y = 1;
		return b;
	}
	int x1, y1;
	int d = gcdex(b%a, a, &x1, &y1);
	*x = y1 - (b / a) * x1;
	*y = x1;
	return d;
}
Esempio n. 3
0
long long gcdex (long long a, long long b, long long & x, long long & y)
{
    if (a == 0)
    {
        x = 0;
        y = 1;
        return b;
    }
    long long x1, y1;
    long long d = gcdex (b%a, a, x1, y1);
    x = y1 - (b / a) * x1;
    y = x1;
    return d;
}
Esempio n. 4
0
File: gcdex.cpp Progetto: qbolec/c
long gcd(long k, long * m , long * w)
{//ci¹g m ma byc malej¹cy
	long **x= new long *[k];
	for(long i=0;i<k;i++)
	{
		x[i]=new long[k];
		for(long j=0;j<k;j++)
			x[i][j]=0;
		x[i][i]=1;
	}
	long id=gcdex(k,m,x,0,k-1,k);
	for(long i=0;i<k;i++)
		w[i]=x[id][i];
	return m[id];
}
Esempio n. 5
0
File: gcdex.cpp Progetto: qbolec/c
long gcdex(long k, long * m, long **x, long i,long o,long n)
{
	if(i==o)
		return i;
	long r= m[i]/m[o];
	m[i]-=r*m[o];
	if(m[i])
	{
		for(long j=0;j<k;j++)
			x[i][j]-=r*x[o][j];
		o=i;
	}
	else
		n--;
	if(++i==k)i=0;
	while(!m[i])if(++i==k)i=0;
		return gcdex( k , m , x , i , o , n );
}
Esempio n. 6
0
int main() {
    freopen("inverse.in", "r", stdin);
    freopen("inverse.out", "w", stdout);
    int x, y, n, p;
    scanf("%d%d", &n, &p);
    if(n == 1) {
        printf("-1\n");
    } else {
        int g = gcdex (p, n, &x, &y);
        if (g != 1)
    	    printf("-1\n");
        else {
        	x = (x % n + n) % n;
    	    printf("%d\n", x);
        }
    }
    return 0;
}