设为首页 加入收藏

TOP

欧几里德算法(C语言)
2014-11-23 21:53:58 来源: 作者: 【 】 浏览:5
Tags:欧几里德 算法 语言

侠客行
#include
void luwei_gcd(int a,int b,int &d,int &x,int &y )
{
if(b==0) //对于ax+by=d且b=0,显然有x=1(因为gcd(a,b) = d,可知a=d)
{
d=a;
x=1;
y=0;
return ;
}
luwei_gcd(b,a%b,d,y,x);//a*x+b*y=d可转化为b*y+(a%b)*(y-x*(a/b))=d
y -= x * (a/b) ;//在回溯时x = y,y = y-x*(a/b),更新x,y的值
}
// ax ≡ 1 (mod n) 满足gcd(a,n) = 1,该问题可化为ax + bn = 1,然后上面的函数,即可求出x
int shuchu (int a ,int n)
{
int d,x,y ;
luwei_gcd(a,n,d,x,y);
if(d==1) //ax + bn = 1
{
x=x%n;
if(x<0)
return (x+n)%n;//返回的值保证是正数
printf("a mod b 的逆元为:%dn",x);
printf("b mod a 的逆元为:%dn",(1-a*(x-26))/n);
}
else
printf("a 与 b 不互素,不存在逆元n");
}

int main()
{
int a,b;
printf("输入两个正整数:(a scanf("%d%d",&a,&b);
shuchu(a,b);
return 0;
}

\

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇《C#妹妹和Objective-C阿姨对话录.. 下一篇RC4算法 N=3(C语言)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: