ง่าย 0 ข้อที่แก้แล้ว อัตราผ่าน 0%

Sum of Multiples

Add values below a limit divisible by any supplied factor.

สิ่งที่คุณจะได้เรียนรู้

  • Test a number against several factors
  • Avoid counting a value twice
  • Accumulate a total below a limit

โจทย์

ดูฉบับแปล

Consider positive integers strictly below limit. Include a value if it is divisible by at least one nonzero factor. Count each included value once even if several factors divide it. Ignore zero factors. Factors [3, 5] give the familiar multiples-of-3-or-5 task.

Implement sum_of_multiples(limit, factors).

Input

limit: The exclusive upper bound.

factors: The factors whose multiples are eligible.

Output

Return the sum of distinct eligible positive integers.

เงื่อนไข

0 ≤ limit ≤ 100,000. There may be 0 through 20 factors, each between 0 and 100,000. Duplicate factors are allowed.

ตัวอย่าง

ตัวอย่างที่ 1
อินพุต:
limit = 12
factors = [3, 5]

ผลลัพธ์ที่คาดหวัง:
expected = 33
อินพุต:
long long limit = 12;
std::vector<long long> factors = {3, 5};

ผลลัพธ์ที่คาดหวัง:
long long expected = 33;
อินพุต:
long limit = 12;
long[] factors = new long[] {3, 5};

ผลลัพธ์ที่คาดหวัง:
long expected = 33;

คำอธิบาย

The included values are 3, 5, 6, 9, and 10. Their sum is 33.

ตัวอย่างที่ 2
อินพุต:
limit = 10
factors = [2, 4]

ผลลัพธ์ที่คาดหวัง:
expected = 20
อินพุต:
long long limit = 10;
std::vector<long long> factors = {2, 4};

ผลลัพธ์ที่คาดหวัง:
long long expected = 20;
อินพุต:
long limit = 10;
long[] factors = new long[] {2, 4};

ผลลัพธ์ที่คาดหวัง:
long expected = 20;

คำอธิบาย

Include 2, 4, 6, and 8. Values 4 and 8 are counted once despite matching both factors.

แนวทางการแก้

ลองทำเองก่อน แล้วค่อยเปิดคำใบ้ทีละข้อ

คำใบ้ 1

Only values divisible by at least one usable factor should contribute once.

คำใบ้ 2

Use inclusion-exclusion to combine overlapping factor multiples without double counting.

คำใบ้ 3

Ignore zero factors and duplicates before doing any arithmetic.

ความซับซ้อนที่คาดหวัง

O(2^m) time, O(1) extra space

แหล่งอ้างอิง

โจทย์นี้ปรับให้เหมาะกับ CodeUtility กรุณาทำตามคำชี้แจงและข้อจำกัดด้านบน

เรียนรู้จากคนอื่น

แนวทางจากชุมชน

ยังไม่มีวิธีทำที่เผยแพร่ ลองแก้โจทย์นี้เพื่อแชร์วิธีแรก