基本代数公式
代数(Algebra)是数学的一门基础学科,主要研究数、数量、关系、结构与代数方程(组)的通用解法及其性质的数学分支。 代数的研究对象不仅是数字,而是各种抽象化的结构。
代数方程是由变量、常数、因子和变量系数组合而成的表达式。
入门的数学代数包括四个方面:整数、小数、分数、百分数。
📐 数学公式
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 基础概念 ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ▶ 虚数:平方是负数或根号是负数的数(实数以外的复数),,比如 √-1 ▶ 实数:有理数和无理数的统称。数学上,实数定义为与数轴上点相对应的数(有限小数和无限小数) ▶ 复数:实数和虚数共同构成复数 ▶ 有理数:整数(正整数,0,负整数)和分数的统称 ▶ 无理数:无限不循环小数(不能用分数表示),比如 √5,2π,lg2, sin1° ▶ 自然数:用以计量事物件数或次序的数,即用数码 0,1,2,3,4,... 表示,也称非负整数 ▶ 常数:规定的数量与数字(确定的数,不会变) ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 代数公式 ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ a² – b² = (a – b)(a + b) (a + b)² = a² + 2ab + b² a²+ b² = (a + b)² – 2ab (a – b)² = a² – 2ab + b² (a + b + c)² = a² + b² + c² + 2ab + 2bc + 2ca (a – b – c)² = a² + b² + c² – 2ab + 2bc – 2ca (a + b)³ = a³ + 3a²b + 3ab² + b² (a – b)³ = a³ – 3a²b + 3ab² – b³ a³ – b³ = (a – b)(a² + ab + b²) a³ + b³ = (a + b)(a² – ab + b²) (a + b)⁴ = a⁴ + 4a³b + 6a²b² + 4ab³ + b⁴ (a – b)⁴ = a⁴ – 4a³b + 6a²b² – 4ab³ + b⁴ a⁴– b⁴ = (a – b)(a + b)(a² +b²) ^代表次方: (a^m)(a^n) = a^(m + n) (ab)^m = a^m • b^m (a^m)^n = a^(mn) ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 分数公式 ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ (a + b ÷ c) = [(ac ÷ c) + (b ÷ c)] = (ac + b) ÷ c (a ÷ b + d ÷ b) = (a + d) ÷ b (a ÷ b + c ÷ d) = (ad + bc) ÷ (bd) (a ÷ b) × (c ÷ d) = (ac) ÷ (bd) (a ÷ b) ÷ (c ÷ d) = (a ÷ b) × (d ÷ c) = (ad) ÷ (bc) ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 百分比 ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 是以 100 的分数表示的数值或比率。它通常用符号 % 表示。 ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 整除 ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ a ÷ b, a 称为被除数,b 是除数。若余数为 0 , 则 a 能被 b 整除(或者 b 能整除 a),记作 b|a b 叫做 a 的约数(或因数),a 叫做 b 的倍数。则 a = qb 且 b ≤ |a| ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 最大公约数 ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 最大公因数(highest common factor,hcf), 也称最大公约数(greatest common divisor,gcd)是数学词汇,指能够整除多个整数的最大正整数。而多个整数不能都为零。 记作 d = GCD(a, b) ▶ 例如求24和60的最大公约数: 分解质因数法: 24 = 2 × 2 × 2 × 3 60 = 2 × 2 × 3 × 5 找出这两个数的公有质因数为2,2,3,24 和 60的最大公约数就是这几个公有质因数的乘积,即 2 × 2 × 3 = 12, 12是最大公约数 24 ÷ 12 = 2 60 ÷ 12 = 5 ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 最小公倍数 ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 最小公倍数(least common multiple,lcm)是数论中的一个概念。若有一个数 X,可以被另外两个数 A、B 整除,且 X 大于(或等于)A 和 B,则 X 为 A 和 B 的公倍数。A 和 B 的公倍数有无限个,而所有正的公倍数中,最小的公倍数就叫做最小公倍数。记作 c = LCM(a, b) 两个整数公有的倍数称为它们的公倍数,其中最小的一个正整数称为它们两个的最小公倍数,而最小公倍数在一般我们实际算的时候,通常是先做质因数分解,然后再依数字质因数分解后的式子,找出最小公倍数。 ▶ 例如,求[12,18,20] 的最小公倍数。因为 12 = 2² × 3,18 = 2 × 3²,20 = 2² × 5,其中三个数的公有的质因数为2,两个数的公有质因数为2与3,每个数独有的质因数为5与3, 其中 2 对应的最高次乘幂为 2;3 对应的最高次乘幂为 2;5 对应的最高次乘幂为 1。将这些次幂乘起来,就可以得到最小公倍数: 所以,[12,18,20] = 2² × 3² × 5 = 180 ▶ 例如,求[24, 60] 的最小公倍数(使用另一种方法,仅限2个数)。 因为最大公约数为 12, 所以最小公倍数等于 (24 x 60) ÷ 12 = 120 证明: 24 = 3 x 8 = 2³ x 3 60 = 6 x 10 = 2 x 3 x 2 x 5 = 2² x 3 x 5 所以,[24,60] = 2³ × 3 x 5 = 120
📌 JavaScript
参考代码:index.js
/** * Math 对象静态属性 */ /* Math.E 返回算术常量 e,即自然对数的底数(约等于2.718)。 Math.LN2 返回 2 的自然对数(约等于0.693)。 Math.LN10 返回 10 的自然对数(约等于2.302)。 Math.LOG2E 返回以 2 为底的 e 的对数(约等于 1.4426950408889634)。 Math.LOG10E 返回以 10 为底的 e 的对数(约等于0.434)。 Math.PI 返回圆周率(约等于3.14159)。 Math.SQRT1_2 返回 2 的平方根的倒数(约等于 0.707)。 Math.SQRT2 返回 2 的平方根(约等于 1.414)。 */ /** * Math 对象静态方法 */ /* Math.abs(x) 返回 x 的绝对值。 Math.acos(x) 返回 x 的反余弦值。 Math.asin(x) 返回 x 的反正弦值。 (x以弧度为单位) Math.atan(x) 以介于 -PI/2 与 PI/2 弧度之间的数值来返回 x 的反正切值。 Math.atan2(y,x) 返回从 x 轴到点 (x,y) 的角度(介于 -PI/2 与 PI/2 弧度之间)。 Math.cos(x) 返回数的余弦。 Math.sin(x) 返回数的正弦。 Math.sqrt(x) 返回数的平方根。 (square: 正方形,平方 square root: 二次根,平方根) Math.tan(x) 返回角的正切。 Math.exp(x) 返回 Ex 的指数。 Math.log(x) 返回数的自然对数(底为e)。 Math.max(x,y,z,...,n) 返回 x,y,z,...,n 中的最高值。 Math.min(x,y,z,...,n) 返回 x,y,z,...,n中的最低值。 Math.pow(x,y) 返回 x 的 y 次幂。(x**n 相当于 Math.pow(x,n) 即x的n次方) Math.random() 返回 0 ~ 1 之间的随机数。 ------ Math.ceil(x) 对数进行上舍入。 => Math.ceil(2.15) = 3 Math.floor(x) 对 x 进行下舍入。 => Math.floor(2.68) = 2 Math.round(x) 四舍五入。 => Math.round(2.68) = 3 Math.trunc(x) 方法会将数字的小数部分去掉,只保留整数部分。(对于数字而言,等同于parseInt()方法) ------ Math.hypot() 函数返回所有参数的平方和的平方根. */ /** * 例子 */ console.log(Math.LN2); /* 输出: 0.6931471805599453 */ console.log(Math.PI); /* 输出:3.141592653589793 */ console.log(Math.sqrt(4)); /* 输出: 2 */ console.log(Math.sqrt(1)); /* 输出:1 */ console.log(Math.sqrt(5)); /* 输出:2.23606797749979 */ console.log(Math.sin(targetAngle1)); /* 输出:0.49999999999999994, 在数学中 sin30° 的值为 1/2 */ console.log(Math.sin(targetAngle2)); /* 输出:1, 在数学中 sin90° 的值为 1 */ console.log(Math.sin(30)); /* 输出: -0.9880316240928618 【由此验证Math.sin()内的参数并不是角度值】 */ console.log(Math.hypot(3, 4)); /* 输出:5, 运算:√(3² + 4²) */ console.log(Math.hypot(3, 4, 5)); /* 输出:7.0710678118654755 */ console.log(Math.hypot(-5)); /* 输出:5 */ const radians = Math.atan2(15, 15); /* 输出:0.7853981633974483 */ const degrees = radians / Math.PI * 180; /* 45度的角 */ const deg360 = Math.PI * 2; const targetAngle1 = deg360 / 12; /* 30度的角 */ const targetAngle2 = deg360 / 4; /* 90度的角 */ /** * 查找两个数的最大公约数 * @param {Array} arr - 输入一个数组(包含两个数) * @returns {Number} 返回最大公约数 */ function gcd(arr) { let low = Math.min(...arr); let high = Math.max(...arr); while (high % low !== 0) { /* 将余数和low替换成目前的 low 和 high */ [high, low] = [low, high % low]; /* 相当于: const tmp = high % low; high = low; low = tmp; */ } return low; } /** * 查找两个数的最小公倍数 * @param {Array} arr - 输入一个数组(包含两个数) * @returns {Number} 返回最小公倍数 */ function lcm(arr) { let low = Math.min(...arr); let high = Math.max(...arr); return (low * high) / gcd(arr); } /** * 查找两个数的最小公倍数(第二种方法) * @param {Array} arr - 输入一个数组(包含两个数) * @returns {Number} 返回最小公倍数 */ function lcm2(arr) { arr = arr.sort((a, b) => b - a); let [high, low] = arr; let res; /* a 和 b 交换位置也不会影响结果 */ const a = arr[0], b = arr[1]; /* 创建的数组用于存储最大数的所有倍数,以便稍后检查其他 LCM, 基于 a */ const tempArr = Array.from({length: high}).fill(0).map( (item, i) => (i+1) * a); /* 判断是否整除, 基于 b */ for (let i = 0; i < tempArr.length; i++) { if (tempArr[i] % b === 0) { res = tempArr[i]; break; } } return res; } export { gcd, lcm, lcm2 };
测试:test.js
import { gcd, lcm } from './index'; /* 最大公约数 */ /* ---------- */ console.log(gcd([5, 1])); /* 输出: 1 */ console.log(gcd([12, 18])); /* 输出: 6 */ console.log(gcd([24, 60])); /* 输出: 12 */ console.log(gcd([18, 20])); /* 输出: 2 */ /* 最小公倍数 */ /* ---------- */ console.log(lcm([5, 1])); /* 输出: 5 */ /* 5 的倍数:[5,10,15,20,25] */ console.log(lcm([12, 18])); /* 输出: 36 */ /* 18 的倍数: [18,36,54,72,90,108,126,144,162,180,198,216,234,252,270,288,306,324] */ console.log(lcm([24, 60])); /* 输出: 120 */ console.log(lcm([18, 20])); /* 输出: 180 */