ปล่อยให้บล็อกเงียบซะนาน เนื่องจากความกลัวว่าจะไม่มีคนเข้ามาอ่าน(ฮา) เลยเอาโจทย์ยอดนิยมมาเผยแพร่ซะหน่อย
โจทย์ที่ว่าก็คือการหาจำนวนเฉพาะ (จำนวนที่มีแค่ 1 กับตัวมันเองหารลงตัว) โดยจะหาจำนวนเฉพาะจนถึงจำนวนที่กำหนด (หาจำนวนเฉพาะถึง 100 แล้วกัน)
not_prime = [j for i in range(2,10) for j in range(i*2,100,i)]
prime = [x for x in range(2,100) if x not in not_prime]
print prime
จบแล้วครับ เทคนิคที่ผมใช้นี้ก็มีชื่อเรียกเท่ๆ ว่า List Comprehension ซึ่งเป็นความสามารถที่มีประโยชน์มากใน python ทำให้โค้ดของเราสั้นขึ้นเยอะเลย
ส่วนวิธีการของอัลกอริทึ่มนี้ก็ง่ายๆ ครับ คือเราจะทำการสร้างลิสต์ของเลขที่ไม่เป็นจำนวนเฉพาะก่อนโดยการจับสมาชิกที่ 2 , 3 , 4 , … ,10 หารลงตัวมาเก็บไว้ในลิสต์
จากนั้นเราก็สามารถหาจำนวนเฉพาะได้จากการไล่เช็คเลขไปเรื่อยๆ จาก 2 ถึง 100 ว่าถ้ามีเลขที่ไม่อยู่ในลิสต์ของจำนวนที่ไม่เป็นจำนวนเฉพาะ ก็จะเก็บเลขนั้นลงในลิสต์
Tip: จำนวนมากสุดที่สามารถนำมาหารเพื่อหาเลขที่หารลงตัวนั้นจะมีค่าไม่เกินรากที่สองของจำนวนที่กำหนดไว้ อย่างเช่น
ถ้าผมต้องการหาจำนวนเฉพาะตั้งแต่ 2 ถึง 30 เลขที่จะนำมาหารก็จะมีตั้งแต่ 2 ไปจนถึง 6 เพราะ 6^2 ก็เกินค่า 30 แล้ว ซึ่งก็หมายความว่าจะนำค่าที่มากกว่า 6 มาหารก็ไม่มีประโยชน์ (7 ก็เป็นจำนวนเฉพาะ ส่วน 8 ก็มี 4 หารลงตัวอยู่แล้ว หรือจะเป็น 9 ซึ่ง 3 ก็หารลงตัวอยู่แล้ว)
จากข้อสังเกตุนี้ทำให้รอบการทำงานของเราลดไปเยอะกว่าวิธีตรงๆ มาก เลยเป็นที่มาของการตั้ง for อันแรกของโปรแกรมนี้ที่วนลูปตั้งแต่ค่า 2 จนถึง 10



