1 Star 0 Fork 0

DGCK81LNN/lnnbot-miniplugs

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
factorize.js 1.94 KB
一键复制 编辑 原始数据 按行查看 历史
DGCK81LNN 提交于 2026-04-25 14:54 +08:00 . 2026-04-25:优化、整合、规范化
//microcommand define factorize
function supNum(n) {
return Array.from(String(0 | n), d => "⁰¹²³⁴⁵⁶⁷⁸⁹"[d]).join("")
}
signature("<...number>", { strictOptions: true })
alias("分解质因数")
option("plain", "-p")
action(async ({ session, options }, ...nums) => {
if (!nums.length) return session.text("internal.insufficient-arguments")
function s(n) {
let nn = 0n, k = 3n, arr = []
if (n > 10n ** 18n) return session.text(".too-big")
nn = n
while ((nn & 1n) === 0n) {
arr.push(2n)
nn = nn >> 1n
}
while (nn > 1n) {
if (nn % k === 0n) {
arr.push(k)
nn = nn / k
} else {
k = k + 2n
if (k * k > nn) {
arr.push(nn)
break
}
}
}
if (!options.plain && arr.length == 1) return session.text(".prime", [String(arr)])
const powers = new Map()
for (const prime of arr) {
if (powers.has(prime)) {
powers.set(prime, powers.get(prime) + 1)
} else {
powers.set(prime, 1)
}
}
if (options.plain) return Array.from(
powers,
([prime, power]) => `${prime}${power > 1 ? `**${power}` : ""}`
).join(" * ")
const r = Array.from(
powers,
([prime, power]) => `${prime}${power > 1 ? supNum(power) : ""}`
).join(" × ")
return `${n} = ${r}`
}
try {
nums = nums.filter(Boolean).map(BigInt)
if (nums.some(n => n <= 1n)) return session.text(".expect-greater-than-one")
} catch {
return session.text(".invalid-input")
}
return nums.map(s).join("<br/>")
})
locale("zh-CN", {
description: "分解质因数",
usage: "输入格式:一个或多个(空格分隔)大于 1、不大于 10¹⁸ 的十进制整数",
options: {
plain: "使用简单输出",
},
messages: {
"invalid-input": "输入无效…",
"expect-greater-than-one": "输入应为大于 1 的整数",
"too-big": "数字过大…",
prime: "{0} 是质数",
},
})
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
JavaScript
1
https://gitee.com/DGCK81LNN/lnnbot-miniplugs.git
git@gitee.com:DGCK81LNN/lnnbot-miniplugs.git
DGCK81LNN
lnnbot-miniplugs
lnnbot-miniplugs
master

搜索帮助