Skip to content

Instantly share code, notes, and snippets.

@shouichi
Created April 6, 2012 20:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save shouichi/2322657 to your computer and use it in GitHub Desktop.
Save shouichi/2322657 to your computer and use it in GitHub Desktop.
======================================================================
template 1.3 -- 雛型(素数判定) -- 2000/ 4/ 3
======================================================================
【ここにはプログラムの動作内容を数行で書いて下さい。】
 このプログラムは、与えられた正の整数が素数であるかどうかを判定します。
判定できる最大値は 2^31 です。
【この文章は README の雛型です。数学のある分野の研究者がプログラムを
作ることを想定しています。この雛型は、まず template という文字を、本当
のパッケージ名に置換してから書き直して下さい。素数判定を題材に、なんと
なくそれらしく書いています。】
【この括弧で囲まれた部分はコメントです。コメントを削除してから配布し
て下さい。この段落のように、きっちりと 70 カラムめに改行を挿入するには、
エディタの機能を使えば簡単です。例えば emacs/mule では M-q ([ESC],q
を順に押す)を実行するなどします。】
【姉妹雛型の Makefile もどうぞ。パッケージ作りが楽になります。】
=====
環 境
=====
開発環境
--------
【ここには使用コンパイラやOSを書きます。】
gcc 2.6.3 (SUN Solaris2.5.1) + gmp-2.0.2
必要環境
--------
【使用したコンパイラ特有の機能やライブラリ等を書きます。】
ANSI C の範囲で書いたつもりです。
外部ライブラリとして gmp を使用しています。
http://www.gnu.org/
から入手して下さい。
動作確認済環境
--------------
【省略可】
cygwin20B (Win95) + gmp 2.0.2
gcc 2.7.2.3 (Vine Linux 1.1) + gmp 2.0
========
使用方法
========
コンパイル
----------
 【ソースプログラムを配布するなら記述します。(Unix系)】
template-***.tar.gz を適当なディレクトリで展開します。
% gzip -cd template-***.tar.gz | tar xvf -
環境に合わせて "Makefile" を編集し、'make' を実行します。
% cd template-***
% make
これでできた 'template' が実行プログラムです。
インストール
------------
 【バイナリファイルを配布するなら記述します。(MS-Win系)】
 template-***.zip を適当なディレクトリで展開して下さい。
コマンドライン書式
------------------
【絶対必要・プログラムの実行のさせ方を記述します。】
% ./template [-r] [-e] [-g] [-v] [number]
説明
----
【プログラムの動かし方についての説明を記述します。】
 コマンドラインで number が与えられれば、この数字の素数判定を行います。
コマンドラインで number 与えられなければ、標準入力から数字を読み込みま
す。結果は標準出力に出力します。number は正の整数で、2^32 よりも小さな
ものを受け付けます。
オプション
----------
-r
判定アルゴリズムを指定します。
√ number 未満の数字で割算を試み、割れなければ素数と
判定します。
ディフォルトでこのアルゴリズムを使います。
-e
判定アルゴリズムを指定します。
エトラステネスのふるいを使います。
-g
判定アルゴリズムを指定します。
gmp にある素数判定ルーチンを使います。
-v
途中経過の情報表示を行います。
環境設定ファイル
----------------
 【なければ省略】
 "./template.env" というファイルがあれば読み込みます。書式はコマンド
ラインオプションと同じですが、1行につき1つのオプションを書くようにし
て下さい。また、'#' 以降はコメントと扱います。
入出力データの書式
------------------
 【ネタを思い付かなかったので、省略します。(^^;】
サンプルデータ
--------------
 【ネタを思い付かなかったので、省略します。(^^;】
====================
アルゴリズムについて
====================
オプション -r によるアルゴリズムは、√ number 未満の数字で割算を試み、
割れなければ素数と判定します。素数であることを確認するためには
O(√number) の計算時間がかかります。
【ここでの説明は長くなるのが普通です。別文書にしても構いません。別にす
るなら LaTeX で書くのも1つの方法です。】
========
利用条件
========
【使用者(特に企業)が、バグによって業務に支障が出たり、特許関連で被
害があった場合に、フリーソフトの作者に損害賠償請求することも考えられま
す。従って 1) は重要です。このコメントは **しっかり削除** して下さい。】
 このプログラムは○○○○が製作しました。プログラムの著作権を主張しま
すが、以下の条件でご利用いただけます。
1)無料・無保証です。バグはないようにしたつもりですが、
一切の責任は負えません。各自の責任においてご使用下さい。
2)再配布は自由に行って下さい。
改造したものの配布は、製作者までご相談下さい。
3)商用利用の際は、事前に製作者までご相談下さい。
バグ等お気づきの点が御座いましたら下記までご連絡下さい。
【この雛型に関しては土村 (tutimura@nn.iij4u.or.jp) までお願いします。】
連絡先 e-mail hogehoge@tokutei.ac.jp
最新版配布場所 http://xxxxxx/program/template/
# Makefile ( 1 source file 1 execute file version )
# 2002/12/ 4
# 日本語のコメント部分に従って修正して下さい。
# $(HOGEHOGE) というのはマクロ(一種の変数)で、
# HOGEHOGE=... で定義された内容に展開して解釈されます。
# 行頭のタブには意味がありますので、スペースに変換しないで下さい。
# できれば、最終的に日本語コメントは削除して下さい。
# ↓パッケージ名かつ実行ファイル名に書き換える
PACKAGE = hogehoge
SRCS = $(PACKAGE).c
# HEADS = $(PACKAGE).h
OBJS = $(SRCS:.c=.o)
# ↓パッケージに含めるファイル名を書き並べる
FILES = README Makefile $(HEADS) $(SRCS)
VER = `date +%Y%m%d`
### command and flags ###
# uncomment when debugging
#DEBUG = -ggdb -pg # -lefence
# common (*.o)
LD = gcc
LDFLAGS = -g $(DEBUG)
LDLIBS = -lm
# C (*.c)
CC = gcc
CFLAGS = -g -O2 -Wall $(DEBUG)
CPPFLAGS= -I.
# C++ (*.cc)
CXX = g++
CXXFLAGS= -g -O2 -Wall $(DEBUG)
# Fortran77 (*.f)
FC = f77
FFLAGS = -Wall $(DEBUG)
# Pascal (*.p)
PC = pc
PFLAGS = -Wall $(DEBUG)
# etc
SHELL = /bin/sh
RM = rm -f
PROF = gprof
### rules ###
.SUFFIXES:
.SUFFIXES: .o .c .cc .f .p
all: $(PACKAGE)
$(PACKAGE): $(OBJS)
$(LD) $(LDFLAGS) $(OBJS) -o $@ $(LDLIBS)
$(OBJS): $(HEADS) Makefile
.c.o:
$(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@
.cc.o:
$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $< -o $@
.f.o:
$(FC) $(FFLAGS) -c $< -o $@
.p.o:
$(PC) $(PFLAGS) $(CPPFLAGS) -c $< -o $@
### useful commands ###
clean:
$(RM) $(PACKAGE) $(OBJS)
$(RM) core gmon.out *~ #*#
tar:
@echo $(PACKAGE)-$(VER) > .package
@$(RM) -r `cat .package`
@mkdir `cat .package`
@ln $(FILES) `cat .package`
tar cvf - `cat .package` | gzip -9 > `cat .package`.tar.gz
@$(RM) -r `cat .package` .package
zip:
zip -9 $(PACKAGE)-$(VER).zip $(FILES)
prof: run
$(PROF) $(PACKAGE) | less
run: all
# ↓サンプルデータで実行するように書き直す
# $(PACKAGE) は実行ファイル名に展開される
# 行頭はタブ(スペースではない)
./$(PACKAGE) < sample-data | less
# Makefile ( n source file 1 execute file version )
# 2002/12/ 4
# 日本語のコメント部分に従って修正して下さい。
# $(HOGEHOGE) というのはマクロ(一種の変数)で、
# HOGEHOGE=... で定義された内容に展開して解釈されます。
# 行頭のタブには意味がありますので、スペースに変換しないで下さい。
# できれば、最終的に日本語コメントは削除して下さい。
# ↓パッケージ名かつ実行ファイル名に書き換える
PACKAGE = hogehoge
# ↓ソースファイルを書き並べる
SRCS = $(PACKAGE).c
# ↓ヘッダファイルを書き並べる
HEADS = $(PACKAGE).h
OBJS = $(SRCS:.c=.o)
# ↓パッケージに含めるファイル名を書き並べる
FILES = README Makefile $(HEADS) $(SRCS)
VER = `date +%Y%m%d`
### command and flags ###
# uncomment when debugging
#DEBUG = -ggdb -pg # -lefence
# common (*.o)
LD = gcc
LDFLAGS = -g $(DEBUG)
LDLIBS = -lm
# C (*.c)
CC = gcc
CFLAGS = -g -O2 -Wall $(DEBUG)
CPPFLAGS= -I.
# C++ (*.cc)
CXX = g++
CXXFLAGS= -g -O2 -Wall $(DEBUG)
# Fortran77 (*.f)
FC = f77
FFLAGS = -Wall $(DEBUG)
# Pascal (*.p)
PC = pc
PFLAGS = -Wall $(DEBUG)
# etc
SHELL = /bin/sh
RM = rm -f
PROF = gprof
### rules ###
.SUFFIXES:
.SUFFIXES: .o .c .cc .f .p
all: $(PACKAGE)
$(PACKAGE): $(OBJS)
$(LD) $(LDFLAGS) $(OBJS) -o $@ $(LDLIBS)
$(OBJS): $(HEADS) Makefile
.c.o:
$(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@
.cc.o:
$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $< -o $@
.f.o:
$(FC) $(FFLAGS) -c $< -o $@
.p.o:
$(PC) $(PFLAGS) $(CPPFLAGS) -c $< -o $@
### useful commands ###
clean:
$(RM) $(PACKAGE) $(OBJS)
$(RM) core gmon.out *~ #*#
tar:
@echo $(PACKAGE)-$(VER) > .package
@$(RM) -r `cat .package`
@mkdir `cat .package`
@ln $(FILES) `cat .package`
tar cvf - `cat .package` | gzip -9 > `cat .package`.tar.gz
@$(RM) -r `cat .package` .package
zip:
zip -9 $(PACKAGE)-$(VER).zip $(FILES)
prof: run
$(PROF) $(PACKAGE) | less
run: all
# ↓サンプルデータで実行するように書き直す
# $(PACKAGE) は実行ファイル名に展開される
# 行頭はタブ(スペースではない)
./$(PACKAGE) < sample-data | less
# Makefile ( n source file n execute file version )
# 2002/12/ 4
# 日本語のコメント部分に従って修正して下さい。
# $(HOGEHOGE) というのはマクロ(一種の変数)で、
# HOGEHOGE=... で定義された内容に展開して解釈されます。
# 行頭のタブには意味がありますので、スペースに変換しないで下さい。
# できれば、最終的に日本語コメントは削除して下さい。
# ↓パッケージ名に書き換える
PACKAGE = hogehoge
# ↓ソースファイルを書き並べる
SRCS = program1.c
PROGS = $(SRCS:.c=)
# ↓パッケージに含めるファイル名を書き並べる
FILES = README Makefile $(SRCS)
VER = `date +%Y%m%d`
### command and flags ###
# uncomment when debugging
#DEBUG = -ggdb -pg # -lefence
# common (*.o)
LDLIBS = -lm
# C (*.c)
CC = gcc
CFLAGS = -g -O2 -Wall $(DEBUG)
CPPFLAGS= -I.
# C++ (*.cc)
CXX = g++
CXXFLAGS= -g -O2 -Wall $(DEBUG)
# Fortran77 (*.f)
FC = f77
FFLAGS = -Wall $(DEBUG)
# Pascal (*.p)
PC = pc
PFLAGS = -Wall $(DEBUG)
# etc
SHELL = /bin/sh
RM = rm -f
PROF = gprof
### rules ###
.SUFFIXES:
.SUFFIXES: .o .c .cc .f .p
all: $(PROGS)
$(PROGS): Makefile
.c:
$(CC) $(CFLAGS) $(CPPFLAGS) $< -o $@ $(LDLIBS)
.cc:
$(CXX) $(CXXFLAGS) $(CPPFLAGS) $< -o $@ $(LDLIBS)
.f:
$(FC) $(FFLAGS) $< -o $@ $(LDLIBS)
.p:
$(PC) $(PFLAGS) $(CPPFLAGS) $< -o $@ $(LDLIBS)
### useful commands ###
clean:
$(RM) $(PROGS)
$(RM) core gmon.out *~ #*#
tar:
@echo $(PACKAGE)-$(VER) > .package
@$(RM) -r `cat .package`
@mkdir `cat .package`
@ln $(FILES) `cat .package`
tar cvf - `cat .package` | gzip -9 > `cat .package`.tar.gz
@$(RM) -r `cat .package` .package
zip:
zip -9 $(PACKAGE)-$(VER).zip $(FILES)
prof: run
$(PROF) $(PACKAGE) | less
run: all
# ↓サンプルデータで実行するように書き直す
# $(PACKAGE) は実行ファイル名に展開される
# 行頭はタブ(スペースではない)
./$(PACKAGE) < sample-data | less
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment