โจทย์
ดูต้นฉบับ (ภาษาอังกฤษ)พิจารณาจำนวนเต็มบวกที่น้อยกว่าขีดจำกัดแบบไม่รวมขอบ หากค่าหนึ่ง ๆ หารด้วยตัวประกอบที่ไม่เป็นศูนย์อย่างน้อยหนึ่งตัวลงตัว ให้นำค่านั้นมารวมด้วย โดยแต่ละค่าที่นำมารวมให้นับเพียงครั้งเดียว แม้ว่าจะหารด้วยหลายตัวประกอบลงตัวก็ตาม ไม่ต้องสนใจตัวประกอบที่เป็นศูนย์ ตัวอย่างเช่น [3, 5] จะได้โจทย์หาผลรวมของจำนวนที่หารด้วย 3 หรือ 5 ลงตัวแบบที่คุ้นเคย
ให้เขียนฟังก์ชัน sum_of_multiples(limit, factors)
อินพุต
limit: ค่าขอบบน (exclusive upper bound)
factors: ตัวประกอบที่ใช้พิจารณาว่าค่าต่าง ๆ มีสิทธิ์ถูกนำมารวมผลรวม
เอาต์พุต
ให้คืนค่าผลรวมของจำนวนเต็มบวกที่มีสิทธิ์และไม่ซ้ำกัน
เงื่อนไข
0 ≤ limit ≤ 100,000 อาจมีตัวประกอบตั้งแต่ 0 ถึง 20 ตัว แต่ละตัวอยู่ระหว่าง 0 ถึง 100,000 ตัวประกอบซ้ำกันได้
ตัวอย่าง
อินพุต:
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;
คำอธิบาย
ค่าที่นำมารวมคือ 3, 5, 6, 9 และ 10 ผลรวมคือ 33
อินพุต:
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;
คำอธิบาย
ให้นำ 2, 4, 6 และ 8 มารวม โดย 4 และ 8 นับเพียงครั้งเดียวแม้ว่าจะหารด้วยทั้งสองตัวประกอบลงตัว
แหล่งอ้างอิง
โจทย์นี้ปรับให้เหมาะกับ CodeUtility กรุณาทำตามคำชี้แจงและข้อจำกัดด้านบน