我一直在朱莉娅试验各种主要的筛子,以期找到最快的.这是我最简单的,如果不是我最快的话,它在我的1.80 GHz处理器上运行大约5-6 ms,n = 100万.但是,当我添加一个简单的"if"语句来处理n <= 1或s(起始编号)> n的情况时,运行时间增加15倍到大约80-90 ms.
using BenchmarkTools
function get_primes_1(n::Int64, s::Int64=2)::Vector{Int64}
#=if n <= 1 || s > n
return []
end=#
sieve = fill(true, n)
for i = 3:2:isqrt(n) + 1
if sieve[i]
for j = i ^ 2:i:n
sieve[j]= false
end
end
end
pl = [i for i in s - s % 2 + 1:2:n if sieve[i]]
return s == 2 ? unshift!(pl, 2) : pl
end
@btime get_primes_1(1_000_000)
Run Code Online (Sandbox Code Playgroud)
如上所述注释掉'if'语句的输出是:
5.752 ms (25 allocations: …Run Code Online (Sandbox Code Playgroud) 我有一个程序,其中该main()函数采用四个参数。当我运行@code_warntype该功能时,似乎没有什么不妥。所有变量都有指定的类型,并且没有实例UNION或其他明显的警告标志。
抱歉,该程序相当长,但我不确定如何在保留问题的同时缩短它:
function main(n::Int, dice::Int=6, start::Int=1, modal::Int=3) ::Tuple{String, Vector{String}, Vector{Float64}}
board = String["GO", "A1", "CC1", "A2", "T1", "R1", "B1", "CH1", "B2", "B3",
"JAIL", "C1", "U1", "C2", "C3", "R2", "D1", "CC2", "D2", "D3",
"FP", "E1", "CH2", "E2", "E3", "R3", "F1", "F2", "U2", "F3",
"G2J", "G1", "G2", "CC3", "G3", "R4", "CH3", "H1", "T2", "H2"]
cc_cards = shuffle(collect(1:16))
ch_cards = shuffle(collect(1:16))
function take_cc_card(square::Int, cards::Vector{Int})::Tuple{Int, Vector{Int}}
if cards[1] == 1
square = findfirst(board, "GO")
elseif cards[1] == 2 …Run Code Online (Sandbox Code Playgroud) 我已经很好地阅读了Julia手册中的"排序功能"部分,并看了一下在这个板上已经提出的一些类似问题,但我认为我没有找到答案我的问题.抱歉,如果我错过了什么.
基本上我有一个向量向量,包含整数的向量.出于示例的目的,每个封闭的向量包含3个整数,但它可以是任何数字.我想通过第一个元素,然后是第二个元素,然后是第三个元素等对封闭的向量进行排序.
让我们从向量开始:
v = [[3, 6, 1], [2, 2, 6], [1, 5, 9], [2, 1, 8], [3, 7, 9],
[1, 1, 2], [2, 2, 2], [3, 6, 2], [1, 2, 5], [1, 5, 6],
[3, 7, 4], [2, 1, 4], [2, 2, 1], [3, 1, 2], [1, 2, 8]]
Run Code Online (Sandbox Code Playgroud)
继续我正在寻找的东西:
v = [[1, 1, 2], [1, 2, 5], [1, 2, 8], [1, 5, 6], [1, 5, 9],
[2, 1, 4], [2, 1, 8], [2, 2, 1], [2, 2, 2], …Run Code Online (Sandbox Code Playgroud)