使用julia编程语言解答欧拉计划——26题
题目
首先设定一个数字为,其中为从1到1000的整数,那么其必定可以通过小数来表示,其中我们忽略有限小数,关注无限小数,由于其均可以通过分数表示,那么必定可以通过循环小数来表示,我们进一步关心其循环节的长度,那么题目就是找到1到1000里面,循环节最长的所对应的。
解答
首先定义一个查找循环节长度的函数,由于较难确定循环节,但可以确定余数,如果余数重复出现,那么就意味着循环节出现,代码如下
function calc_cycle(i)
cycles = []
my_length = 0
num = 1
while num ≠ 0
new_num = num * 10 ÷ i
if num ∈ cycles
my_length = length(cycles) - findfirst(x -> x == num, cycles)+1
break
end
cycles = vcat(cycles, num)
num = num * 10 % i
if num == 0
my_length = 0
break
end
end
my_length
end
在确定了函数之后,进一步通过数组生成式生成对应数组,并完成最大查找
my_vector = [1:1000...]
my_answer = map(calc_cycle,my_vector)
findmax(my_answer)

浙公网安备 33010602011771号