ผมก็กำลังเรียนเขียน program อยู่ อยาก share idea นิดหน่อยครับ โจทย์ข้อนี้คือให้หาว่าจำนวนเต็มที่ให้มา เป็นผลคูณของ จำนวนเฉพาะหรือไม่(semiprime number) ถ้า approach จากว่าหา list ของ prime number ที่น้อยกว่า sqrt ของ n >> result แรกเราจะได้ list มาชุดนึง จากนั้นถ้าเราอยากรู้ว่า จำนวน n ที่เขาให้มามีตัวประกอบเฉพาะ แค่ 1 คู่ไหมก็น่าจะต้องวน loop จาก list นี้ใช่ไหมครับ ส่วนตัวผมคิดว่าเราอาจจะไม่ต้องหา list ของ prime number แต่แรกครับ เช่น n = 12 > 2*6, 3*4, (4*3, 6*2) เทียบกับ n = 6 > 2*3, (3*2) โดยที่เราจะไม่คิด case ในวงเล็บ เพราะ เกิน condition และเราจะเพิ่ม i ไปเรื่อยๆ ถ้ามี i ไหน หาร n ลงตัว เราจะไป flag ไว้ว่า จำนวนครั้งที่หารลงตัว +1 โดยที่เราจะวน i จาก 2 ถึง i <= sqrt(n) เราจะ return false ถ้า flag เรามากกว่า 1 หรือ i เกินค่าที่กำหนด case ที่ n ไม่ใช่ emiprime คิดว่าน่าจะไวกว่า แต่ case ที่เป็น semiprime ไม่แน่ใจเหมือนกันครับ แต่อาจจะเพิ่ม logic เพิ่มแบบใน clip ก็น่าจะไวขึ้นอยู่ เช่น ถ้า 2 หารไม่ลงตัวแล้ว เราะก็จะไม่เอา i = 4,6,8,.. มาคิด ปล. ผมเข้าใจว่า การหา sqrt มันทำยากกว่าการยกกำลัง ผมเลยคิดว่า condition เป็น i*i <= n อาจจะดีกว่าครับ