yuanyuelang
导航
C++博客
首页
新随笔
联系
聚合
管理
<
2024年11月
>
日
一
二
三
四
五
六
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
留言簿
给我留言
查看公开留言
查看私人留言
随笔分类
编程之美
(rss)
编程珠玑
(rss)
文章分类
计算几何学
(rss)
数据结构(1)
(rss)
数论(4)
(rss)
图论(4)
(rss)
转载(1)
(rss)
文章档案
2010年4月 (1)
2009年9月 (9)
阅读排行榜
评论排行榜
常用链接
我的随笔
我的评论
我参与的随笔
统计
随笔 - 0
文章 - 10
评论 - 5
引用 - 0
最新评论
1. re: 数论(2)-------扩展欧几里得算法
定理:gcd(a,b) = gcd(b,a mod b) (a>b 且a mod b 不为0)
--s
2. re: 数论(2)-------扩展欧几里得算法
min=y-[y/a]y错了.
--CrazyForAC
3. re: 数论(2)-------扩展欧几里得算法
评论内容较长,点击标题查看
--晓楠
4. re: 数论(2)-------扩展欧几里得算法
顶
--ding
5. re: 不相交集合数据结构[未登录]
太简陋了一点吧
--a
数论(4)--------求解模线性方程
求解模线性方程 ax
º
b(mod n)
1.必备知识:扩展欧几里得算法的知识,可查看我的
数论(3)------扩展欧几里得算法
2.基本思路:
设d=gcd(a,n),用扩展欧几里得算法解线性方程 ax'+ny'=d.
如果d|b,则方程ax
º
b(mod n)有一个解的值x0=x'(b/d)mod n
算法导论里说:(还没理解)
方程ax
º
b(mod n)有解(即存在d|b,其中d=gcd(a,n)),x0是该方程的任意一个解,则该方程对模n恰有d个不同的
解,分别为 x(i)=x(0)+i(n/d)(i=1,2,...d).
特别的设e=x0+n,方程ax=b(mod n)的最小整数解x1=e mod (n/d),最大整数解x2=x1+(d-1)*(n/d)。
所以实际上用欧几里得算法记得x'就可以知道结果了。
3.源代码模板
1
//
扩展欧几里得算法
2
int
Extended_Euclid(
int
a,
int
b,
int
&
x,
int
&
y)
3
{
4
if
(b
==
0
)
{
5
x
=
1
;
6
y
=
0
;
7
return
a;
8
}
9
int
d
=
Extended_Euclid(b,a
%
b,x,y);
10
int
temp
=
x;x
=
y;y
=
temp
-
a
/
b
*
y;
11
return
d;
12
}
1
//
用扩展欧几里得解模线性方程ax=b (mod n)
2
bool
modularLinearEquation(
int
a,
int
b,
int
n)
3
{
4
int
x,y,x0,i;
5
int
d
=
Extended_Euclid(a,n,x,y);
6
if
(b
%
d)
7
return
false
;
8
x0
=
x
*
(b
/
d)
%
n;
9
for
(i
=
1
;i
<=
d;i
++
)
10
printf(
"
%d\n
"
,(x0
+
i
*
(n
/
d))
%
n);
11
return
true
;
12
}
13
posted on 2009-09-05 19:49
原语饿狼
阅读(1322)
评论(0)
编辑
收藏
引用
所属分类:
数论
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
数论(4)--------求解模线性方程
数论(3)-------欧拉phi函数
数论(2)-------扩展欧几里得算法
数论(1)-----欧几里得算法
网站导航:
博客园
IT新闻
BlogJava
知识库
博问
管理
Powered by:
C++博客
Copyright © 原语饿狼