逆順と平方(1)からの続き
中嶋慧さんのpythonによる逆順関数がスマートだったので Juliaでも試してみた。数値を文字列に変換して,逆順にしたものをもういちど数値に戻すというものだ。プログラムとしてはスッキリしたけれど,実行時間が倍になってしまった。
function rev(n)
b = string(n)
c = b[end:-1:1]
d = parse(Int,c)
return d
end
function counter(m,j)
cnt = 1
kmax = Int(ceil(10^(m-1)*sqrt(10)))
for k in 10^(m-1)+1:kmax
kr = rev(k)
# kj = BigInt(k)^j
# krj = BigInt(kr)^j
kj = k*k
krj = kr*kr
if(rev(kj)==krj)
# if(2000<=k<=2299)
# println(k,":",kr,":",kr^j,":",rev(k^j))
# end
cnt = cnt + 1
end
end
return cnt
end
function list(l,j)
sum=1
for i in 1:l
@time sum = sum + counter(i,j)
println(i," **",j," = ",sum)
end
end
list(9,2)
0.000010 seconds (36 allocations: 1.781 KiB)
1 **2 = 4
0.000015 seconds (264 allocations: 13.062 KiB)
2 **2 = 13
0.000138 seconds (2.60 k allocations: 128.844 KiB)
3 **2 = 37
0.001734 seconds (25.96 k allocations: 1.254 MiB)
4 **2 = 100
0.016847 seconds (259.48 k allocations: 12.538 MiB)
5 **2 = 253
0.224788 seconds (2.59 M allocations: 125.376 MiB, 12.69% gc time)
6 **2 = 615
2.393325 seconds (25.95 M allocations: 1.224 GiB, 12.89% gc time)
7 **2 = 1434
26.113517 seconds (259.47 M allocations: 12.244 GiB, 11.55% gc time)
8 **2 = 3244
284.531202 seconds (2.59 G allocations: 128.882 GiB, 11.40% gc time)
9 **2 = 7116
0 件のコメント:
コメントを投稿