<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<atom:link href="https://www.gentoo-zh.org/extern.php?action=feed&amp;tid=325&amp;type=rss" rel="self" type="application/rss+xml" />
		<title><![CDATA[Gentoo中文社区 / C 练习实例16 - 最大公约数和最小公倍数]]></title>
		<link>https://www.gentoo-zh.org/viewtopic.php?id=325</link>
		<description><![CDATA[C 练习实例16 - 最大公约数和最小公倍数 最近发表的帖子。]]></description>
		<lastBuildDate>Mon, 29 Aug 2022 07:04:41 +0000</lastBuildDate>
		<generator>FluxBB</generator>
		<item>
			<title><![CDATA[C 练习实例16 - 最大公约数和最小公倍数]]></title>
			<link>https://www.gentoo-zh.org/viewtopic.php?pid=331#p331</link>
			<description><![CDATA[<p>题目：输入两个正整数m和n，求其最大公约数和最小公倍数。</p><p>程序分析：</p><p>（1）最小公倍数=输入的两个数之积除于它们的最大公约数，关键是求出最大公约数；</p><p>（2）求最大公约数用辗转相除法（又名欧几里德算法）</p><p>1）证明：设c是a和b的最大公约数，记为c=gcd(a,b),a&gt;=b,<br />令r=a mod b<br />设a=kc，b=jc，则k，j互素，否则c不是最大公约数<br />据上，r=a-mb=kc-mjc=(k-mj)c<br />可知r也是c的倍数，且k-mj与j互素，否则与前述k，j互素矛盾,<br />由此可知，b与r的最大公约数也是c，即gcd(a,b)=gcd(b,a mod b)，得证。</p><p>2）算法描述：</p><p>第一步：a ÷ b，令r为所得余数（0≤r 第二步：互换：置 a←b，b←r，并返回第一步。</p><br /><p>#include&lt;stdio.h&gt;<br />int main()<br />{<br />&#160; &#160; int a,b,t,r,n;<br />&#160; &#160; printf(&quot;请输入两个数字：\n&quot;);<br />&#160; &#160; scanf(&quot;%d %d&quot;,&amp;a,&amp;b);<br />&#160; &#160; if(a&lt;b)<br />&#160; &#160; {t=b;b=a;a=t;}<br />&#160; &#160; r=a%b;<br />&#160; &#160; n=a*b;<br />&#160; &#160; while(r!=0)<br />&#160; &#160; {<br />&#160; &#160; &#160; &#160; a=b;<br />&#160; &#160; &#160; &#160; b=r;<br />&#160; &#160; &#160; &#160; r=a%b;<br />&#160; &#160; }<br />&#160; &#160; printf(&quot;这两个数的最大公约数是%d，最小公倍数是%d\n&quot;,b,n/b);<br />&#160; &#160; <br />&#160; &#160; return 0;<br />}</p>]]></description>
			<author><![CDATA[dummy@example.com (batsom)]]></author>
			<pubDate>Mon, 29 Aug 2022 07:04:41 +0000</pubDate>
			<guid>https://www.gentoo-zh.org/viewtopic.php?pid=331#p331</guid>
		</item>
	</channel>
</rss>
