/** * 数学相关的工具函数 * @filename packages/utils/src/utils/MathUtils.ts * @author Mr Prince * @date 2022-12-06 16:51:40 */ /** * 是否是自然数 */ export declare const isNaturalNumber: (number: any) => boolean; /** * 求最大公约数 * @description 辗转相除法 * @param dividend 被除数 * @param divisor 除数 * @throws {TypeError|RangeError} */ export declare const gcd: (dividend: number, divisor: number) => number; /** * 最小公倍数: Least Common Multiple * * 整数的判断交给 gcd 去做 */ export declare function lcm(a: number, b: number): number; /** * 计算多个数字的平方和的平方根 */ export declare const hypot: (...values: number[]) => number; /** * 求最右侧的1 */ export declare const lowbit: (k: number) => number; /** * 求组合数 * 只能计算比较小的m,n 大了容易溢出 * a * C * b */ export declare function C(m: number, n: number): number; /** * 百分比 * * 数据过大可能引起异常 * 如果结果是负数,也会向下取整 * @example divToPercent(-1.001, 1) => -101% * * @param dividend 被除数 * @param divisor 除数 * @param precision 精度,默认保留整数部分 */ export declare function divToPercent(dividend: number, divisor: number, precision?: number): string; /** * 快速幂 * * 快速求 base ** index * * 建议不要使用小数,经过运算后误差较大 * * @param base 底数 * @param index 指数 * @param mod 一般来说,需要用到快速幂的,结果范围都超过能表示的最大整数 * 需要对结果进行求余操作才能正常返回,否则大概率返回 Infinite * 建议不要超过 Math.sqrt(Number.MAX_SAFE_INTEGER) */ export declare function fastPow(base: number, index: number, mod: number): number; /** * 所有小于等于n 的质数 * 欧拉筛 */ export declare function getPrimeList(n: number): number[]; /** * 判断是否是素数 */ export declare function isPrime(n: number): boolean; /** * 生成所有组合可能性 * generateCombinations(10, 3) -> * [[1, 2, 3], [1, 2, 4], ...] */ export declare const generateCombinations: (n: number, k: number) => number[][]; /** * 生成有效的括号对 * @param n - 括号对数 */ export declare const generateParentheses: (n: number) => string[]; /** * 二进制转十进制 */ export declare const binaryToDecimal: (binaryString: string) => number; /** * 统一 */ export declare const normalizeNumSign: (num: number) => number; /** * 获取一个数所有的因数 */ export declare const getFactors: (num: number) => number[]; /** * 获取所有质因数 */ export declare const getPrimeFactors: (num: number) => number[]; /** * 求二元一次方程的根 * * @example ax^2 + bx + c = 0; * * @param a - 二次方的系数 * @param b - 一次放的系数 * @param c - 常数项 */ export declare const quadraticRoots: (a: number, b: number, c: number) => void; /** * 数字翻转 */ export declare const reverse: (num: number) => number; /** * 获取数据中位数 */ export declare const getMedianNumber: (arr: number[]) => number; /** * 直接计算斐波那契的第 n 项 */ export declare const fibonacci: (n: number) => number;