ความท้าทาย
ใช้ตะแกรง Sundaramnสำหรับการหาตัวเลขที่สำคัญดังต่อไปนี้ ใช้เป็นจำนวนเต็มการป้อนข้อมูลและการส่งออกตัวเลขที่สำคัญดังต่อไปนี้n nคุณสามารถสันนิษฐานได้ว่าnจะน้อยกว่าหรือเท่ากับหนึ่งล้านเสมอ
กระชอน
เริ่มต้นด้วยรายการของจำนวนเต็มจากไป
1nลบตัวเลขทั้งหมดที่อยู่ในรูปแบบ
i + j + 2ijที่:iและน้อยกว่าjอยู่เสมอมากกว่าหรือเท่ากับซึ่งเป็นมากกว่าหรือเท่ากับnji1
i + j + 2ijน้อยกว่าหรือเท่ากับn
คูณจำนวนที่เหลือและเพิ่ม
21
นี้จะให้ผลผลิตทั้งหมดตัวเลขที่สำคัญ (ยกเว้น2ซึ่งควรจะรวมอยู่ในการส่งออกของคุณ) 2n + 2น้อยกว่า
202นี่เป็นภาพเคลื่อนไหวของตะแกรงที่ถูกใช้ในการหาช่วงเวลาดังต่อไปนี้

เอาท์พุต
ผลลัพธ์ของคุณควรเป็นจำนวนเต็มทุกตัว≤ n(ตามลำดับจากน้อยไปหามาก) ตามด้วยบรรทัดใหม่:
2
3
5
ที่ไหนเป็นn5
ตัวอย่าง
> 10
2
3
5
7
> 30
2
3
5
7
11
13
17
19
23
29
>ปัจจัยการผลิตจะแสดงด้วย
(i,j)ด้วยi<=jแต่ผลลัพธ์จะไม่เปลี่ยนแปลงหากเราเพิกเฉยต่อข้อกำหนดนี้ เราสามารถทำได้เพื่อบันทึกไบต์?
i <= jฉันไม่เคยบอกว่าคุณจะต้องตรวจสอบว่า มันเป็นเพียงส่วนหนึ่งของการทำงานของตะแกรง ใช่คุณสามารถละไว้i <= jในรหัสของคุณ @xnor
2n+1) ซึ่งไม่ใช่แบบฟอร์ม2(i + j + 2ij)+1- เราสามารถทดสอบคุณสมบัตินี้โดยตรงกับช่วงเวลาที่เป็นไปได้หรือรหัสของเราต้องทำคูณ 2 บวก 1 ในบางจุด ?
nกับสิ่งที่เกิดขึ้น 2 * n + 2ในรายละเอียดของวิธีการที่มันบอกว่ามันจะสร้างจำนวนเฉพาะทั้งหมดขึ้นอยู่กับ แต่ในรายละเอียดของอินพุต / เอาต์พุตก็บอกว่าใส่เป็นและการส่งออกจำนวนเฉพาะทั้งหมดขึ้นอยู่กับn nดังนั้นเราควรจะใช้วิธีการในการสร้างช่วงเวลาทั้งหมด2 * n + 2แล้วปล่อยสิ่งที่มีขนาดใหญ่กว่าnเอาท์พุท? หรือเราควรคำนวณnในคำอธิบายวิธีการจากอินพุตn?
n=30หายไป 29 ในผลลัพธ์