add fibonacci doubling method snippet

This commit is contained in:
Code Lich 2025-04-26 14:54:39 +07:00
parent 1970f40ba0
commit 376697852b
1 changed files with 32 additions and 0 deletions

View File

@ -3,6 +3,9 @@
local ls = require 'luasnip'
local s = ls.snippet
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', {
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
}
)
),
})