Under the Bridge

a Picture of the Late Him

MT4.1:テンプレートタグで100までの数から素数を求める

2008年1月21日 23:43 | Writer: yoshi | 記事本文 | コメント(0) | トラックバック(0)

Movable Type4.1にて加えられた算術演算子(opモデファイア)などを用い、テンプレートタグで100までの数から素数を求めるサンプルコード。

はじめに

Web上に転がっていた適当なCソースコードをMTテンプレートタグでソースコンバートしただけ。

値を返す関数ではなく、ただダーっと画面上に素数を表示するのみである。ループ上限を1000とかにすると再構築的にキツイ。なので勝手に100にする。

元のコード


/* ex-prime.c */
#include <stdio.h>
int main(void)
{
	int i,j,flag;
	
	for(i=1;i<=1000;i++){
		flag = 0;
		for(j=1;j<=i;j++){
			if( i%j == 0 ){
				flag++;
			}
		}
		if (flag == 2){
			printf("%d ",i);
		}
	}
	return (0);
}

テンプレートタグでコンバートしたコード


<MTSetvar name="Max" value="100">
<MTFor var="x" from="1" to="$Max">
	<MTSetVar name="flag" value="0">
	<MTFor var="y" from="1" to="$x">
		<MTIf name="x" value="$y" op="mod" eq="0">
			<MTSetVar name="flag" op="++">
		</MTIf>
	</MTFor>
	<MTIf name="flag" eq="2">
		<MTGetVar name="x">
	</MTIf>
</MTFor>

<MTFor var="x" from="1" to="$Max">
	<MTGetvar name="x">:<MTGetVar name="Furui[$x]">
</MTFor>

考察

このサンプルは単に既存プログラムのコンバートにとどめたが、(たとえば)100までの数の中の素数は、上限の平方根つまり10までの中の素数(2,3,5,7の4つしかない)で割り切れる数をふるい落とすという「エラトステネスのふるい」原理を用いればもっと高速化・効率化できる。MTのテンプレートタグでは平方根を求めることができないので、フィルタリスト配列を先に準備してふるい落として似たようなことをしてもイイかと。

MTではちょっと無理がある...が仕方がない。

トラックバック(0)

このブログ記事を参照しているブログ一覧: MT4.1:テンプレートタグで100までの数から素数を求める

このブログ記事に対するトラックバックURL:

コメントする






Categories
Entries
Feed
スポンサードリンク

parts

フィードメーター - Under the Bridge

あわせて読みたい

なかのひと

2008年4月5日開催、MT4LP5

2008 yoshi(apstar)