﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-wuzimian-随笔分类-计算机程序设计艺术</title><link>http://www.cppblog.com/wuzimian/category/19408.html</link><description>努力努力再努力，坚持坚持再坚持</description><language>zh-cn</language><lastBuildDate>Sun, 03 Jun 2012 12:45:07 GMT</lastBuildDate><pubDate>Sun, 03 Jun 2012 12:45:07 GMT</pubDate><ttl>60</ttl><item><title>欧几里德算法 贝祖等式  扩展欧几里德算法</title><link>http://www.cppblog.com/wuzimian/archive/2012/06/02/177218.html</link><dc:creator>吴自勉</dc:creator><author>吴自勉</author><pubDate>Sat, 02 Jun 2012 09:53:00 GMT</pubDate><guid>http://www.cppblog.com/wuzimian/archive/2012/06/02/177218.html</guid><wfw:comment>http://www.cppblog.com/wuzimian/comments/177218.html</wfw:comment><comments>http://www.cppblog.com/wuzimian/archive/2012/06/02/177218.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wuzimian/comments/commentRss/177218.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wuzimian/services/trackbacks/177218.html</trackback:ping><description><![CDATA[计算机程序设计艺术开篇便提到了“欧几里德”算法，也就是中国的“辗转相除法”。<br />这个是个古老、经典的算法。<br />说的是：两个正整数 a，b（设a&gt;b）求出他们的最大公约数。<br />算法步骤：<br />1. r=a mod b    （mod是相除取余数的意思）<br />2.如果r=0，则b是最大公约数，否则转3<br />3.a=b ，b=r  转 1<br />算法的一种证明：<br />证：<br />    要证欧几里德算法成立，即证: gcd(a,b)=gcd(b,r),其中 gcd是取最大公约数的意思，r=a mod b<br />    下面证 gcd（a，b）=gcd（b，r）<br />    设  c是a，b的最大公约数，即c=gcd（a，b），则有 a=mc，b=nc，其中m，n为正整数，且m，n互为质数<br />    由 r= a mod b可知，r= a- qb 其中，q是正整数，<br />    则 r=a-qb=mc-qnc=（m-qn）c<br />    b=nc,r=(m-qn)c，且n，（m-qn）互质（假设n，m-qn不互质，则n=xd, m-qn=yd 其中x,y,d都是正整数，且d&gt;1<br />                                                                则a=mc=(qx+y)dc, b=xdc,这时a,b 的最大公约数变成dc，与前提矛盾，<br />                                                                 所以n ，m-qn一定互质）<br />    则gcd（b,r）=c=gcd（a,b）<br />    得证。<br /><br /><p><span style="font-size: small;"><span style="color: #0000ff;"><strong>定理2</strong></span></span>：（由法国数学家拉梅证明）欧几里得算法所需除法次数不超过m和n中较小的那个数的十进制位数的5倍</p><p><span style="color: #0000ff;"><strong><span style="font-size: small;">定理3：</span></strong></span>欧几里得算法所需除法次数不超过2 log(n+1)，其中n为较小的数</p><br />由欧几里德算法，衍生出来一个重要的贝祖等式：两数的最大公约数可以用两数的整数倍相加来表示，如21 = gcd(105,252)=5 × 105 + (−2） × 252。<br />贝祖等式的<font color="#FF0000">非严格证明</font>：<br />证明：<br />我们可以将辗转相除法的步骤看成：<br />a      = p(0)b + r(0)
  <br />b      = p(1)r(0)+r(1)<br />r(0)   = p(2)r(1)+r(2)
  <br />r(1)   = p(3)r2+r(3)<br />......<br />r(n-2)= p(n)r(n-1)+ r(n)
<br />  r(n-1)= p(n+1)r(n)+ r(n+1)
<br />  r(n)   = p(n+2)r(n+1)<br />当我们做到最后一个式子的时候，我们就知道 gcd(a，b)=r(n+1);<br />由倒数第二个式子，我们可知：r(n+1)
=gcd(a,b)=r(n-1) - p(n+1)r(n),其中r(n)又可以用上面的式子r(n)=r(n-2)-p(n)r(n-1)代替，就这样不断地用上面的式子代替，<br />到最后我们就可以得到gcd(a,b)关于a，b的一次的关系式。<br />得证.<br /><br />现在我们已经知道 存在 x，y使得 ax+by=gcd(a，b)成立了，那么怎样更直接地求x，y呢？<br />设： a*x1+b*y1=gcd(a,b)<br />       b*x2+(a mod b)*y2=gcd(b,(a mod b))<br />我们已经知道了：gcd(a,b)=gcd(b,(a mod b))<br />那么有：a*x1+b*y1=b*x2+(a mod b)*y2=b*x2+(a-a/b*b)*y2=b*x2 +a*y2- a/b*b*y2=a*y2+b*(x2-a/b*y2)<br />那么我们有：x1=y2 ;   y1=x2-a/b*y2, 这样就把求x1,y1的问题，转化为求b*x2+(a mod b)*y2=gcd(a,b)中x2,y2的问题。<br />这个思路是基于递归的思想的。因为 gcd 不断的递归求解一定会有个时候 b=0，所以递归可以结束。<br />基于递归实现的C++代码：<br /><div style="background-color:#eeeeee;font-size:13px;BORDER:1px solid #CCCCCC;PADDING-RIGHT: 5px;PADDING-BOTTOM: 4px;PADDING-left: 4px;PADDING-TOP: 4px;WIDTH: 98%;word-break:break-all"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000; ">#include</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">iostream</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #000000; "></span><span style="color: #0000FF; "></span><span style="color: #000000; "></span><span style="color: #000000; "></span><span style="color: #000000; "></span><span style="color: #000000; "></span><span style="color: #000000; "></span><span style="color: #000000; "></span><span style="color: #000000; "></span><span style="color: #000000; "></span><span style="color: #000000; "></span><span style="color: #000000; "></span><span style="color: #0000FF; ">using</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">namespace</span><span style="color: #000000; "> std;<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> x</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,y</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,gcd</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> qq(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> ,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">);<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> main()<br />{   <br />    </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> a,b;<br />    cin</span><span style="color: #000000; ">&gt;&gt;</span><span style="color: #000000; ">a</span><span style="color: #000000; ">&gt;&gt;</span><span style="color: #000000; ">b;//输入的时候保证a&gt;b，a，b是正整数就好了就好了，我这里没再检查a，b的有效性。<br />    qq(a,b);<br />    cout</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">x</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">*</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">a</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">+</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">y</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">*</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">b</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">x</span><span style="color: #000000; ">*</span><span style="color: #000000; ">a</span><span style="color: #000000; ">+</span><span style="color: #000000; ">y</span><span style="color: #000000; ">*</span><span style="color: #000000; ">b</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">gcd</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">endl;<br /><br /><br />    </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />}<br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> qq(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> a,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> b)<br />{<br />    </span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(</span><span style="color: #000000; ">0</span><span style="color: #000000; ">==</span><span style="color: #000000; ">b)<br />    {<br />        x</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />        y</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />        gcd</span><span style="color: #000000; ">=</span><span style="color: #000000; ">a;<br />        </span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">;<br />    }<br />    </span><span style="color: #0000FF; ">else</span><span style="color: #000000; "><br />    {<br />        qq(b,a</span><span style="color: #000000; ">%</span><span style="color: #000000; ">b);<br />        </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> temp</span><span style="color: #000000; ">=</span><span style="color: #000000; ">x;<br />        x</span><span style="color: #000000; ">=</span><span style="color: #000000; ">y;<br />        y</span><span style="color: #000000; ">=</span><span style="color: #000000; ">temp</span><span style="color: #000000; ">-</span><span style="color: #000000; ">a</span><span style="color: #000000; ">/</span><span style="color: #000000; ">b</span><span style="color: #000000; ">*</span><span style="color: #000000; ">y;<br />        </span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">;<br />    }<br /><br />}</span></div><br />循环版本：<br /><div style="background-color:#eeeeee;font-size:13px;BORDER:1px solid #CCCCCC;PADDING-RIGHT: 5px;PADDING-BOTTOM: 4px;PADDING-left: 4px;PADDING-TOP: 4px;WIDTH: 98%;word-break:break-all"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000; ">#include</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">iostream</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #000000; "></span><span style="color: #0000FF; "></span><span style="color: #000000; "></span><span style="color: #000000; "></span><span style="color: #000000; "></span><span style="color: #000000; "></span><span style="color: #000000; "></span><span style="color: #000000; "></span><span style="color: #000000; "></span><span style="color: #000000; "></span><span style="color: #000000; "></span><span style="color: #000000; "></span><span style="color: #000000; "></span><span style="color: #000000; "></span><span style="color: #000000; "></span><span style="color: #0000FF; ">using</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">namespace</span><span style="color: #000000; "> std;<br /><br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> qq(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> ,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">);<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> main()<br />{   <br />    </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> a,b;<br />    cin</span><span style="color: #000000; ">&gt;&gt;</span><span style="color: #000000; ">a</span><span style="color: #000000; ">&gt;&gt;</span><span style="color: #000000; ">b;<br />    qq(a,b);<br /><br />    </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />}<br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> qq(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> a,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> b)<br />{<br />    </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> x</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,y</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,gcd</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;  //<br />    </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> temp[</span><span style="color: #000000; ">100</span><span style="color: #000000; ">][</span><span style="color: #000000; ">2</span><span style="color: #000000; ">];    //记录过程中的a，b <br />    </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> counter</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />    </span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">(b</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />    {<br />        temp[counter][</span><span style="color: #000000; ">0</span><span style="color: #000000; ">]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">a;<br />        temp[counter][</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">b;<br />        counter</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />        </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> tempnum</span><span style="color: #000000; ">=</span><span style="color: #000000; ">a;<br />        a</span><span style="color: #000000; ">=</span><span style="color: #000000; ">b;<br />        b</span><span style="color: #000000; ">=</span><span style="color: #000000; ">tempnum</span><span style="color: #000000; ">%</span><span style="color: #000000; ">b;<br />    }<br /><br />    gcd </span><span style="color: #000000; ">=</span><span style="color: #000000; ">a;<br />    cout</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">gcd</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">endl;<br />    </span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> i</span><span style="color: #000000; ">=--</span><span style="color: #000000; ">counter;i</span><span style="color: #000000; ">&gt;=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;i</span><span style="color: #000000; ">--</span><span style="color: #000000; ">)<br />    {   <br />        </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> tempnum</span><span style="color: #000000; ">=</span><span style="color: #000000; ">x;<br />        x</span><span style="color: #000000; ">=</span><span style="color: #000000; ">y;<br />        y</span><span style="color: #000000; ">=</span><span style="color: #000000; ">tempnum</span><span style="color: #000000; ">-</span><span style="color: #000000; ">temp[i][</span><span style="color: #000000; ">0</span><span style="color: #000000; ">]</span><span style="color: #000000; ">/</span><span style="color: #000000; ">temp[i][</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]</span><span style="color: #000000; ">*</span><span style="color: #000000; ">y;<br />    }<br />   cout</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">x</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">*</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">temp[</span><span style="color: #000000; ">0</span><span style="color: #000000; ">][</span><span style="color: #000000; ">0</span><span style="color: #000000; ">]</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">+</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">y</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">*</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">temp[</span><span style="color: #000000; ">0</span><span style="color: #000000; ">][</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">x</span><span style="color: #000000; ">*</span><span style="color: #000000; ">temp[</span><span style="color: #000000; ">0</span><span style="color: #000000; ">][</span><span style="color: #000000; ">0</span><span style="color: #000000; ">]</span><span style="color: #000000; ">+</span><span style="color: #000000; ">y</span><span style="color: #000000; ">*</span><span style="color: #000000; ">temp[</span><span style="color: #000000; ">0</span><span style="color: #000000; ">][</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">gcd</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">endl;<br /><br />}</span></div>以上求解x，y的过程我们不妨把它称为“扩展欧几里德算法”，当然我这种说法很不好，为什么呢？<br />在《计算机程序设计艺术》第一卷 1.2 数学准备 这个小节里面，Knuth先生给出了一个十分优美的“扩展欧几里德算法”<br />如下：<br /><br /><br />扩展的欧几里德算法：给定两个正整数m和n，我们计算它们的最大公约数和两个整数a和b，使am+bn=d；<br />E1：【初始化】a0=b=1； a=b0=0； c=m；d=n；<br />E2：【除】q=c/d；r=c%d<br />E3：【余数为0？】如果 r=0；算法终止，在这种情况下，我们如愿地有：am+bn=d；<br />E4：【循环】c=d；  d=r； t=a0；  a0=a;   a=t-qa;    t=b0;    b0=b;   b=t-qb,    返回E2<br />END；<br /><br />关于这个算法，Knuth先生也给出了优美的证明，我这里不再赘言；<br />下面给出实现代码：<br /><br /><div style="background-color:#eeeeee;font-size:13px;BORDER:1px solid #CCCCCC;PADDING-RIGHT: 5px;PADDING-BOTTOM: 4px;PADDING-left: 4px;PADDING-TOP: 4px;WIDTH: 98%;word-break:break-all"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000; ">#include</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">iostream</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /><br /></span><span style="color: #0000FF; ">using</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">namespace</span><span style="color: #000000; "> std;<br /><br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> qq(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> ,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">);<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> main()<br />{   <br />    </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> m,n;<br />    cin</span><span style="color: #000000; ">&gt;&gt;</span><span style="color: #000000; ">m</span><span style="color: #000000; ">&gt;&gt;</span><span style="color: #000000; ">n;//这里同样没有检查m、n有效性，自己保证m&gt;n,都是正整数<br />    qq(m,n);<br /><br />    </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />}<br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> qq(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> m,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> n)<br />{<br />    </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> a</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,b</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,a0</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,b0</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />    </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> c</span><span style="color: #000000; ">=</span><span style="color: #000000; ">m,d</span><span style="color: #000000; ">=</span><span style="color: #000000; ">n;<br /><br />    </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> q</span><span style="color: #000000; ">=</span><span style="color: #000000; ">c</span><span style="color: #000000; ">/</span><span style="color: #000000; ">d;<br />    </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> r</span><span style="color: #000000; ">=</span><span style="color: #000000; ">c</span><span style="color: #000000; ">%</span><span style="color: #000000; ">d;<br /><br />    </span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">(r</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />    {<br />         c</span><span style="color: #000000; ">=</span><span style="color: #000000; ">d;<br />         d</span><span style="color: #000000; ">=</span><span style="color: #000000; ">r;<br />         </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> t</span><span style="color: #000000; ">=</span><span style="color: #000000; ">a0;<br />         a0</span><span style="color: #000000; ">=</span><span style="color: #000000; ">a;<br />         a</span><span style="color: #000000; ">=</span><span style="color: #000000; ">t</span><span style="color: #000000; ">-</span><span style="color: #000000; ">q</span><span style="color: #000000; ">*</span><span style="color: #000000; ">a;<br /><br />         t</span><span style="color: #000000; ">=</span><span style="color: #000000; ">b0;<br />         b0</span><span style="color: #000000; ">=</span><span style="color: #000000; ">b;<br />         b</span><span style="color: #000000; ">=</span><span style="color: #000000; ">t</span><span style="color: #000000; ">-</span><span style="color: #000000; ">q</span><span style="color: #000000; ">*</span><span style="color: #000000; ">b;<br /><br />         q</span><span style="color: #000000; ">=</span><span style="color: #000000; ">c</span><span style="color: #000000; ">/</span><span style="color: #000000; ">d;<br />         r</span><span style="color: #000000; ">=</span><span style="color: #000000; ">c</span><span style="color: #000000; ">%</span><span style="color: #000000; ">d;<br /><br />    }<br />    cout</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">a=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">a</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">  b=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">b</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">  d=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">d</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">endl;<br />}</span></div>我们可以看到这个算法的实现起来非常的简洁、明了！<br />求解同样的问题，算法不同，会有相当大的差别。<br />程序=算法+数据结构<br /><br />&lt;全文完&gt;<br /><br /><br /><br /><br /><br /><br /><img src ="http://www.cppblog.com/wuzimian/aggbug/177218.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wuzimian/" target="_blank">吴自勉</a> 2012-06-02 17:53 <a href="http://www.cppblog.com/wuzimian/archive/2012/06/02/177218.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>