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
数论(1)-----欧几里得算法
一. 欧几里得算法------求最大公约数
1.公式:
gcd(a,b)=gcd(b,a mod b) (a为非负整数,b为正整数)
2.证明:
思路:
两个整数a和b,如果a|b&&b|a(即a,b能互相整除),那么a=b.
基础知识准备:
A. (a mod b)=a-qb , q=(int)a/b;
B. d|a&&d|b => d|(xa+yb) x,y为任意整数
C. d|a&&d|b => d|gcd(a,b)
过程:(1)证:gcd(a,b)|gcd(b,a mod b)
设d=gcd(a,b)=>d|a&&d|b,
由A和B知道,d|a&&d|b=>d|(xa+yb)=>d|(a mod b)
由C知道,d|b&&d|(a mod b)=>d|gcd(b,a mod b)=>gcd(a,b)|gcd(b,a mod b);
(2) 证:gcd(b,a mod b)|gcd(a,b)
设d=gcd(b,a mod b)=>d|b&&d|(a mod b),
由A和B知道, d|b&&d|(a mod b)=>d|(xb+y(a mod b)=>d|a(由A,a=qb+(a mod b))
由C知道,d|a&&d|b=>d|gcd(a,b)=>gcd(b,a mod b)|gcd(a,b)
由(1)和(2),可以知道我们得证了。
3.程序模板:
//
递归版本
int
gcd(
int
a,
int
b)
{
return
b
?
gcd(b,a
%
b):a;
}
//
循环版本
int
gcd1(
int
a,
int
b)
{
for
(
int
c
=
a
%
b;c;a
=
b,b
=
c,c
=
a
%
b);
return
b;
}
4.学习心得
欧几里得算法是之后很多数论算法的基础,了解它的原理是很有必要的。
自己要举几个例子来熟悉一下算法的执行过程中的每一步骤,这样才能记忆深刻。
上述的基础知识也是很有用的,平时注意积累。不懂的地方就几个实例看一下。
posted on 2009-09-05 15:48
原语饿狼
阅读(411)
评论(0)
编辑
收藏
引用
所属分类:
数论
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
数论(4)--------求解模线性方程
数论(3)-------欧拉phi函数
数论(2)-------扩展欧几里得算法
数论(1)-----欧几里得算法
网站导航:
博客园
IT新闻
BlogJava
知识库
博问
管理
Powered by:
C++博客
Copyright © 原语饿狼