blog/content/post/2008/09/21/2008-09-21-00001030.md

55 lines
3.2 KiB
Markdown
Raw Normal View History

2019-03-31 11:00:21 +00:00
---
title: 車輪の再発名だけど、ユークリッドの互除法
author: kazu634
date: 2008-09-21
wordtwit_post_info:
- 'O:8:"stdClass":13:{s:6:"manual";b:0;s:11:"tweet_times";i:1;s:5:"delay";i:0;s:7:"enabled";i:1;s:10:"separation";s:2:"60";s:7:"version";s:3:"3.7";s:14:"tweet_template";b:0;s:6:"status";i:2;s:6:"result";a:0:{}s:13:"tweet_counter";i:2;s:13:"tweet_log_ids";a:1:{i:0;i:4287;}s:9:"hash_tags";a:0:{}s:8:"accounts";a:1:{i:0;s:7:"kazu634";}}'
categories:
- gauche
- Lisp
---
<div class="section">
<p>
Gaucheでユークリッドの互除法を考える。とりあえずアルゴリズムはwikipediaに載っているから、それを再帰的になるように書き直す。自分は、ユークリッドの互除法を実現するために必要なことは全部知っているはずだから、できるはず。がんばる。
</p>
<blockquote title="ユークリッドの互除法 - Wikipedia" cite="http://ja.wikipedia.org/wiki/%E3%83%A6%E3%83%BC%E3%82%AF%E3%83%AA%E3%83%83%E3%83%89%E3%81%AE%E4%BA%92%E9%99%A4%E6%B3%95">
<ol>
<li>
入力を m, n (m ≧ n) とする。
</li>
<li>
n = 0 なら、 m を出力してアルゴリズムを終了する。
</li>
<li>
n が m を割り切るなら、 n を出力してアルゴリズムを終了する。
</li>
<li>
m を n で割った余りを新たに m とし、更に m と n を取り替えて 3. に戻る。
</li>
</ol>
<p>
<cite><a href="http://ja.wikipedia.org/wiki/%E3%83%A6%E3%83%BC%E3%82%AF%E3%83%AA%E3%83%83%E3%83%89%E3%81%AE%E4%BA%92%E9%99%A4%E6%B3%95" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://ja.wikipedia.org/wiki/%E3%83%A6%E3%83%BC%E3%82%AF%E3%83%AA%E3%83%83%E3%83%89%E3%81%AE%E4%BA%92%E9%99%A4%E6%B3%95', 'ユークリッドの互除法 &#8211; Wikipedia');" target="_blank">ユークリッドの互除法 &#8211; Wikipedia</a></cite>
</p>
</blockquote>
<p>
がんばった結果:
</p>
<pre class="syntax-highlight">
<span class="synSpecial">(</span>define <span class="synSpecial">(</span>euclid m n<span class="synSpecial">)</span>
<span class="synSpecial">(</span><span class="synStatement">cond</span> [<span class="synSpecial">(</span><span class="synStatement">=</span> n <span class="synConstant"></span><span class="synSpecial">)</span> m]
[<span class="synSpecial">(</span><span class="synStatement">=</span> <span class="synSpecial">(</span>remainder m n<span class="synSpecial">)</span> <span class="synConstant"></span><span class="synSpecial">)</span> n]
[else <span class="synSpecial">(</span>euclid n <span class="synSpecial">(</span>remainder m n<span class="synSpecial">))</span>]<span class="synSpecial">))</span>
gosh&#62; <span class="synSpecial">(</span>euclid <span class="synConstant">6</span> <span class="synConstant">2</span><span class="synSpecial">)</span>
<span class="synConstant">2</span>
gosh&#62; <span class="synSpecial">(</span>euclid <span class="synConstant">5</span> <span class="synConstant">2</span><span class="synSpecial">)</span>
<span class="synConstant">1</span>
gosh&#62; <span class="synSpecial">(</span>euclid <span class="synConstant">100</span> <span class="synConstant">3</span><span class="synSpecial">)</span>
<span class="synConstant">1</span>
</pre>
</div>