以前のプログラムをさらに改善しました。
3!~6!の一般式
N!(N=3,4,5,6) に対して
n=[2.1√(N!-2)] により項数nを定めると
N=3,4,5,6に対してn=4,9,22,56
そしてa[1]~a[n]の値は
a[k]=[√(N!/2)・sin((2k-1)π/(2n))+1.265]
この式によると
N=3のときn=4で
a[1]~a[4]=1,2,2,1
N=4のときn=9で
a[1]~a[9]=1,2,3,4,4,4,3,2,1
N=5のときn=22で
a[1]~a[22]=1,2,3,4,5,6,7,8,8,8,8,8,8,8,8,7,6,5,4,3,2,1
N=6のときn=56で
a[1]~a[56]=
1,2,3,4,6,7,8,9,9,10,11,12,13,14,15,15,16,17,17,18,18,18,19,19,19,20,20,20,
20,20,20,19,19,19,18,18,18,17,17,16,15,15,14,13,12,11,10,9,9,8,7,6,4,3,2,1
sinで生成していますので、グラフを描けばsinカーブに近い綺麗な形になると思います。
※N=7には使えません。
No.959
らすかる
4月24日 18:18
引用元:
https://bbs1.rocketbbs.com/shochandas/posts/956
import math
def fact(N):
p = 1
for i in range(1,N+1):
p = p*i
return p
def num(N):
n = math.floor(2.1*math.sqrt(fact(N)-2))
return n
if __name__ == '__main__':
N = int(input('Nの値を3~6から選んで入力して下さい:'))
n = num(N)
L = [ ]
for k in range(1,n+1):
p = math.floor(math.sqrt(fact(N)/2)*math.sin((2*k-1)*math.pi/(2*num(N)))+1.265)
L.append(p)
print(L)
結果:
Nの値を3~6から選んで入力して下さい:3
[1, 2, 2, 1]
Nの値を3~6から選んで入力して下さい:4
[1, 2, 3, 4, 4, 4, 3, 2, 1]
Nの値を3~6から選んで入力して下さい:5
[1, 2, 3, 4, 5, 6, 7, 8, 8, 8, 8, 8, 8, 8, 8, 7, 6, 5, 4, 3, 2, 1]
Nの値を3~6から選んで入力して下さい:6
[1, 2, 3, 4, 6, 7, 8, 9, 9, 10, 11, 12, 13, 14, 15, 15, 16, 17, 17, 18, 18, 18, 19, 19, 19, 20, 20, 20, 20, 20, 20, 19, 19, 19, 18, 18, 18, 17, 17, 16, 15, 15, 14, 13, 12, 11, 10, 9, 9, 8, 7, 6, 4, 3, 2, 1]
今回のは1つにまとめた上に特殊なimportを使っていないので、コピペすれば誰でも試せると思います。
念のため、pythonです。
おまけ: