โจทย์
A prime is an integer greater than 1 divisible only by 1 and itself. Add every prime strictly smaller than limit. The limit itself is excluded even when it is prime.
Implement prime_sum(limit).
Input
limit: The exclusive upper bound.
Output
Return the sum of the eligible primes, or 0 when none exist.
เงื่อนไข
0 ≤ limit ≤ 2,000,000. Return the sum using a signed 64-bit integer.
ตัวอย่าง
อินพุต:
limit = 12
ผลลัพธ์ที่คาดหวัง:
expected = 28
อินพุต:
long long limit = 12;
ผลลัพธ์ที่คาดหวัง:
long long expected = 28;
อินพุต:
long limit = 12;
ผลลัพธ์ที่คาดหวัง:
long expected = 28;
คำอธิบาย
The primes below 12 are 2, 3, 5, 7, and 11; their sum is 28.
อินพุต:
limit = 2
ผลลัพธ์ที่คาดหวัง:
expected = 0
อินพุต:
long long limit = 2;
ผลลัพธ์ที่คาดหวัง:
long long expected = 0;
อินพุต:
long limit = 2;
ผลลัพธ์ที่คาดหวัง:
long expected = 0;
คำอธิบาย
There are no primes strictly below 2.
แนวทางการแก้
ลองทำเองก่อน แล้วค่อยเปิดคำใบ้ทีละข้อ
คำใบ้ 1
The main cost is finding primes efficiently; naive divisibility checks for every number will be too slow.
คำใบ้ 2
Use a sieve-like approach to mark composites, then add the numbers that remain unmarked and below the limit.
คำใบ้ 3
Remember that the limit itself is excluded, even when it is prime, and small limits may contribute nothing.
ความซับซ้อนที่คาดหวัง
O(limit log log limit) time, O(limit) extra space
แหล่งอ้างอิง
โจทย์นี้ปรับให้เหมาะกับ CodeUtility กรุณาทำตามคำชี้แจงและข้อจำกัดด้านบน