【语法】
一、隐蔽陷阱
找亲和数对时只验了 220 的真因子和等于 284,忘了回验 284 的真因子和是否回到 220,单边相等的假对混进结果表,越攒越乱。
二、底层原理
亲密数是互为对方真因子和的一对数:220 的真因子和为 284,284 的真因子和为 220,一来一回才成立。真因子和等于全部约数和扣除自身,枚举到平方根成对收集即可,规模一次缩减一半。
三、正确代码
基础写法(真因子和,平方根成对收集):
local function aliquot(n)
local s, i = 1, 2
while i * i <= n do
if n % i == 0 then
s = s + i
if i ~= n / i then
s = s + math.floor(n / i)
end
end
i = i + 1
end
return s
end
进阶写法(配对回验):
local function isAmicable(a)
local b = aliquot(a)
return b ~= a and aliquot(b) == a
end
local p = getplayerbyname("pair01")
sendmsg(p, 1, "220 与 284 互惠:"
.. tostring(isAmicable(220)))
四、引擎验证
isAmicable(220) 为 true;3000 以内再筛出 1184 与 1210 一对;单边相等的 30 被回验拦下。
五、FAQ
问:完数算亲密数吗?
答:不算,b 等于 a 的自影情形已被排除。
问:枚举到平方根为什么够?
答:约数成对出现,大因子由小因子顺手带出。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏】 一、规则机制 线上事故:玩家装备耐久打空才发现,战力拦腰砍半,打不动怪又投诉掉率。耐久提醒立双档:耐久低于三成弹黄…
【语法】 一、机制原理 抛个坑:行列表格要变成列行,每格都搬一遍还新建了整张表——方形矩阵能不能原地换?转置沿对角线折返:只…
【游戏】 一、规则机制 隐蔽的坑:"最近浏览"里同一件商品重复出现五六次,足迹成了复读机。浏览足迹立两条:每次查看先在足迹里…
【语法】 一、机制原理 一行代码拆解:local bucket = math.floor(v / width)。数值分布统计…
【语法】 一、机制原理 一行代码拆解:setmetatable(cfg, {__index = DEFAULTS})。配置对…
【游戏】 一、规则机制 线上事故:结算时玩家追问"我到底打了多少",战斗中没有任何实时输出面板,事后对不上账。输出统计两步走…