求乘法逆元的代码:
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
#include <string.h>
#include <math.h>
using namespace std;
int gcd(int a,int b,int &x,int &y)
{
int ans;
if(!b)
{
x=1;
y=0;
return a;
}
ans = gcd(b,a%b,x,y);
int temp = x;
x= y;
y= temp - (a/b)*y;
return ans;
}
int main()
{
///求ax+by=c的乘法逆元
int a,b,c,x,y;
int temp;
while(scanf("%d%d%d",&a,&b,&c),a||b||c)
{
int ans_x,ans_y;///a,b的逆元
///c总为1
temp = gcd(a,b,x,y);
if(c%temp)
{
printf("乘法逆元不存在!\n");
continue;
}
ans_x = (x*c/temp) <0 ? x*c/temp+b : x*c/temp;
ans_y = (y*c/temp) <0 ? y*c/temp+a : y*c/temp;
printf("%d %d\n",ans_x,ans_y);
}
return 0;
}
原文地址:http://tzxvae.blog.51cto.com/8981690/1585250