Dễ 0 đã giải Tỷ lệ chấp nhận 0%

Tổng các bội số

Cộng các giá trị nhỏ hơn một giới hạn, chia hết cho bất kỳ thừa số nào được cung cấp.

Bạn sẽ học được gì

  • Kiểm tra một số với nhiều thừa số
  • Tránh đếm một giá trị hai lần
  • Cộng dồn tổng dưới một giới hạn

Đề bài

Xem bản gốc (English)

Xét các số nguyên dương nhỏ hơn giới hạn. Bao gồm một giá trị nếu nó chia hết cho ít nhất một thừa số khác 0. Mỗi giá trị chỉ được tính một lần, kể cả khi chia hết cho nhiều thừa số. Bỏ qua các thừa số bằng 0. Các thừa số [3, 5] là ví dụ quen thuộc về bài toán bội số của 3 hoặc 5.

Cài đặt hàm sum_of_multiples(limit, factors).

Đầu vào

limit: Giới hạn trên (không bao gồm).

factors: Các thừa số để xét bội số hợp lệ.

Đầu ra

Trả về tổng các số nguyên dương hợp lệ, không trùng lặp.

Ràng buộc

0 ≤ limit ≤ 100.000. Có thể có từ 0 đến 20 thừa số, mỗi thừa số nằm trong khoảng từ 0 đến 100.000. Cho phép các thừa số trùng nhau.

Ví dụ

Ví dụ 1
Đầu vào:
limit = 12
factors = [3, 5]

Kết quả mong đợi:
expected = 33
Đầu vào:
long long limit = 12;
std::vector<long long> factors = {3, 5};

Kết quả mong đợi:
long long expected = 33;
Đầu vào:
long limit = 12;
long[] factors = new long[] {3, 5};

Kết quả mong đợi:
long expected = 33;

Giải thích

Các giá trị được tính là 3, 5, 6, 9 và 10. Tổng của chúng là 33.

Ví dụ 2
Đầu vào:
limit = 10
factors = [2, 4]

Kết quả mong đợi:
expected = 20
Đầu vào:
long long limit = 10;
std::vector<long long> factors = {2, 4};

Kết quả mong đợi:
long long expected = 20;
Đầu vào:
long limit = 10;
long[] factors = new long[] {2, 4};

Kết quả mong đợi:
long expected = 20;

Giải thích

Bao gồm 2, 4, 6 và 8. Các giá trị 4 và 8 chỉ được tính một lần dù chia hết cho cả hai thừa số.

Hướng tiếp cận

Hãy tự thử trước, sau đó mở từng gợi ý một.

Gợi ý 1

Chỉ các giá trị chia hết cho ít nhất một thừa số hợp lệ mới được tính một lần.

Gợi ý 2

Dùng inclusion-exclusion để gộp các bội số trùng nhau mà không đếm lặp.

Gợi ý 3

Bỏ qua các thừa số 0 và các giá trị trùng trước khi tính toán.

Độ phức tạp mong đợi

thời gian O(2^m), bộ nhớ phụ O(1)

Tham khảo

Thử thách này đã được điều chỉnh cho CodeUtility. Hãy làm theo đề bài và các ràng buộc ở trên.

Học hỏi từ người khác

Giải pháp cộng đồng

Chưa có giải pháp nào được chia sẻ. Hãy giải thử thách này để đăng giải pháp đầu tiên.