add fibonacci doubling method snippet
This commit is contained in:
parent
1970f40ba0
commit
376697852b
|
|
@ -3,6 +3,9 @@
|
||||||
local ls = require 'luasnip'
|
local ls = require 'luasnip'
|
||||||
local s = ls.snippet
|
local s = ls.snippet
|
||||||
local t = ls.text_node
|
local t = ls.text_node
|
||||||
|
local i = ls.insert_node
|
||||||
|
local fmt = require('luasnip.extras.fmt').fmt
|
||||||
|
local rep = require('luasnip.extras').rep
|
||||||
|
|
||||||
ls.add_snippets('cpp', {
|
ls.add_snippets('cpp', {
|
||||||
s('cpptemplate', {
|
s('cpptemplate', {
|
||||||
|
|
@ -256,4 +259,33 @@ ls.add_snippets('cpp', {
|
||||||
'};',
|
'};',
|
||||||
},
|
},
|
||||||
}),
|
}),
|
||||||
|
s(
|
||||||
|
'fib',
|
||||||
|
fmt(
|
||||||
|
[[
|
||||||
|
pair<ll, ll> {}(ll {}) {{
|
||||||
|
if ({} == 0)
|
||||||
|
return {{0, 1}};
|
||||||
|
auto p = {}({} >> 1);
|
||||||
|
ll a = p.first;
|
||||||
|
ll b = p.second;
|
||||||
|
ll c = (a * ((2 * b % MOD - a + MOD) % MOD)) % MOD;
|
||||||
|
ll d = ((a * a) % MOD + (b * b) % MOD) % MOD;
|
||||||
|
if ({} & 1) {{
|
||||||
|
return {{d, (c + d) % MOD}};
|
||||||
|
}} else {{
|
||||||
|
return {{c, d}};
|
||||||
|
}}
|
||||||
|
}}
|
||||||
|
]],
|
||||||
|
{
|
||||||
|
i(1, 'fibonacci'), -- function name
|
||||||
|
i(2, 'n'), -- input variable
|
||||||
|
rep(2), -- reuse n
|
||||||
|
rep(1), -- reuse function name
|
||||||
|
rep(2), -- reuse n
|
||||||
|
rep(2), -- reuse n
|
||||||
|
}
|
||||||
|
)
|
||||||
|
),
|
||||||
})
|
})
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue