多重階乗プログラム [FORTRAN]

こんにちは、管理人のさくらえびです。
カテゴリ.計算用プログラムの初投稿です。
計算用プログラムというコンテンツを作りながらも、どんなものが実用的なのかわからず、
安直な感じで申し訳ないですが、初投稿は多重階乗プログラムにしてみることにしました。
チョイスの理由ですか?やだなぁ~!簡単だし、コードが短いからです。

ところで。。。
HTMLにスタイリッシュなソースコード表示はできたものの、
スタイリッシュな数式は載せれるのだろうかと考えたとき、一度は導入したい・・・Texを(カイジ風の倒置法)

こういう理由もあって、階乗です。だって記号がびっくりだから!!!
では真面目に、まずは定義
Definition(階乗):
非負整数であるnに対し、1からnまでの整数の積をn!とあらわす。
n=5なら、5! = 5×4×3×2×1 = 120
Definition(2重階乗):
非負整数であるnに対し、1からnまでの整数のうち、1つ飛ばしの積をn!!とあらわす。
n=5なら、5!! = 5×3×1 = 15
Definition(多重階乗):
非負整数であるnに対し、1からnまでの整数のうち、k飛ばしの積をn!kとあらわす。
n=5,k=3なら、5!k = 5×2 = 10
そろそろプログラムに入りましょう。
プログラムでは、それぞれの階乗対して、一個ずつ関数を作りません。
最初から多重階乗として作成し、引数によって戻り値を制御します。
ゼロの階乗とか1の階乗は、1となるそうなのでその処理だけはif文で組みます。

下記はソースコード

function nFac(order,n)
implicit none
double precision nFac
integer*4 n,i,order
if (n == 0 ) then
nFac = 1.d0
endif
if (n == 1) then
nFac = 1.d0
endif
if (n >= 2) then
nFac = 1.d0
do i=n,2,-order
nFac = nFac*dble(i)
enddo
endif
end function nFac

使いかたはこんな感じ

program test
implicit none
double precision nFac
integer*4 i
do i = 1,5
print *,"n=",i,"n!!=",nFac(2,i)
enddo
end program test

ではでは!また更新していきます。

  • さくらえび
  • さくらえびと申します
    企業勤め系研究者です。理論物理が専門分野。
    エンジニア・営業・コンサルを経験し、今はデータサイエンティストとしてお仕事をさせていただいております。