Это не совсем product tree, мне просто не было нужно это пока, но идея таже, просто не храню всё дерево function product(array::Vector{Int}) temp = [BigInt(x) for x in array] while length(temp) != 1 len = (length(temp) + 1) >> 1 - 1 for i in 1:len temp[i] = temp[(i << 1) - 1] * temp[(i << 1)] end if iseven(length(temp)) temp[len + 1] = temp[end] * temp[end - 1] else temp[len + 1] = temp[end] end resize!(temp, len + 1) end return temp[1] end function productsimple(array::Vector{Int}) result = BigInt(1) for element in array result *= BigInt(element) end return result end
Первое - это productsimple, второе - product: 17.392417 seconds (1.00 M allocations: 44.336 GiB, 1.35% gc time) 0.205586 seconds (1.00 M allocations: 39.022 MiB, 13.12% gc time)
В качестве входных данных использовал первые 200_000 простых чисел
Обсуждают сегодня