Skip to content

Commit cf604a9

Browse files
committed
https://leetcode.cn/problems/nth-magical-number
1 parent cb2cebf commit cf604a9

File tree

3 files changed

+41
-8
lines changed

3 files changed

+41
-8
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ Step 2. Add the dependency
4545

4646
<summary>展开查看</summary>
4747

48+
https://leetcode.cn/problems/nth-magical-number
49+
4850
https://leetcode-cn.com/problems/target-sum/
4951

5052
https://leetcode.cn/problems/soup-servings

nth-magical-number/index.ts

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
export default function nthMagicalNumber(
2+
n: number,
3+
a: number,
4+
b: number,
5+
): number {
6+
const MOD = 1000000007;
7+
8+
const c = lcm(a, b);
9+
const m = Math.floor(c / a) + Math.floor(c / b) - 1;
10+
const r = n % m;
11+
const res = (c * Math.floor(n / m)) % MOD;
12+
if (r === 0) {
13+
return res;
14+
}
15+
let addA = a,
16+
addB = b;
17+
for (let i = 0; i < r - 1; ++i) {
18+
if (addA < addB) {
19+
addA += a;
20+
} else {
21+
addB += b;
22+
}
23+
}
24+
return (res + (Math.min(addA, addB) % MOD)) % MOD;
25+
}
26+
export function lcm(a: number, b: number) {
27+
return Math.floor((a * b) / gcd(a, b));
28+
}
29+
export function gcd(a: number, b: number): number {
30+
return b !== 0 ? gcd(b, a % b) : a;
31+
}

number-of-subarrays-with-lcm-equal-to-k/index.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,24 +4,24 @@ export default function subarrayLCM(nums: number[], k: number): number {
44

55
for (let i = 0; i < len; i++) {
66
if (k % nums[i]) continue;
7-
let lcm = nums[i];
7+
let lcm_num = nums[i];
88
for (let j = i; j < len; j++) {
99
if (k % nums[j]) break;
10-
lcm = getLCM(lcm, nums[j]);
10+
lcm_num = lcm(lcm_num, nums[j]);
1111

12-
if (lcm === k) cnt += 1;
12+
if (lcm_num === k) cnt += 1;
1313
}
1414
}
1515

1616
return cnt;
1717
}
1818

19-
function getGCD<T extends number | bigint>(a: T, b: T): T {
19+
function gcd<T extends number | bigint>(a: T, b: T): T {
2020
if (b == 0) return a;
21-
return getGCD(b, (a % b) as T) as T;
21+
return gcd(b, (a % b) as T) as T;
2222
}
2323

24-
function getLCM<T extends number | bigint>(a: T, b: T): T {
25-
return ((a * b) / getGCD(a, b)) as T;
24+
function lcm<T extends number | bigint>(a: T, b: T): T {
25+
return ((a * b) / gcd(a, b)) as T;
2626
}
27-
export { getGCD, getLCM };
27+
export { gcd, lcm };

0 commit comments

Comments
 (0)