| 1185 | return true; |
| 1186 | } |
| 1187 | leastFactor(n) { |
| 1188 | n = new BigNumber(n).abs().toNumber() |
| 1189 | if (Number.MAX_SAFE_INTEGER < n) throw `${n} is superior to ${Number.MAX_SAFE_INTEGER}` |
| 1190 | let out = false |
| 1191 | if (isNaN(n) || !isFinite(n)) out = NaN; |
| 1192 | if (n == 0) out = out !== false ? out : 0; |
| 1193 | if (n % 1 || n * n < 2) out = out !== false ? out : 1; |
| 1194 | if (n % 2 == 0) out = out !== false ? out : 2; |
| 1195 | if (n % 3 == 0) out = out !== false ? out : 3; |
| 1196 | if (n % 5 == 0) out = out !== false ? out : 5; |
| 1197 | const m = Math.sqrt(n); |
| 1198 | for (let i = 7; i <= m; i += 30) { |
| 1199 | if (n % i == 0) out = out !== false ? out : i; |
| 1200 | if (n % (i + 4) == 0) out = out !== false ? out : i + 4; |
| 1201 | if (n % (i + 6) == 0) out = out !== false ? out : i + 6; |
| 1202 | if (n % (i + 10) == 0) out = out !== false ? out : i + 10; |
| 1203 | if (n % (i + 12) == 0) out = out !== false ? out : i + 12; |
| 1204 | if (n % (i + 16) == 0) out = out !== false ? out : i + 16; |
| 1205 | if (n % (i + 22) == 0) out = out !== false ? out : i + 22; |
| 1206 | if (n % (i + 24) == 0) out = out !== false ? out : i + 24; |
| 1207 | } |
| 1208 | out = out !== false ? out : n |
| 1209 | |
| 1210 | return new BigNumber(out) |
| 1211 | } |
| 1212 | n(n, base=10) { |
| 1213 | return new BigNumber(n, base) |
| 1214 | } |