使用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)

posted @ 2023-01-10 16:37  thwzjx  阅读(65)  评论(0)    收藏  举报