私は、各三角形の数の要素の数を計算して、それらの最初の要素が X 数を超える要素を持っていることを確認するいくつかの小さなソフトウェアを持っています (はい、それはプロジェクタイラーの問題であり、番号 12ですが、私は知りませんでした)まだ解決していません)... X にランダムな値を作成して、コードが何をどのくらいの時間で実行するかを確認しようとしているときに、(少なくとも私にとっては) 奇妙なことに気付きました: X=47 になるまで、実行時間は明らかに通常の方法で増加します、しかし、X = 48の場合、通常よりも増加し、関数呼び出しはレートよりもはるかに大きくなります..なぜそうするのですか??
コード:
def fac(n):
c=0
for i in range (1,n+1):
if n%i==0:
c=c+1
return c
n=1
while True:
summ=0
for i in range (1,n+1):
summ=summ+i
if fac(summ)>X:
break
n=n+1
print summ
プロファイリング時:
when X=45 : 314 function calls in 0.027 CPU seconds
when X=46 : 314 function calls in 0.026 CPU seconds
when X=47 : 314 function calls in 0.026 CPU seconds
when X=48 : 674 function calls in 0.233 CPU seconds
when X=49 : 674 function calls in 0.237 CPU seconds
続けていれば、システムコールが増えたり、時間が急激に増えたりする点は他にもあると思いますが、以前はそういう点がありましたが、時間が小さかったのであまり気にならなかった. 新しい値のために関数をもう一度呼び出すだけではないでしょうか??
PSはcProfileをプロファイラーとして使用しXています。ここのコードはデモ用です。値をコードに直接書き込みます...よろしくお願いします...