ขั้นตอนวิธีพีลบหนึ่งของพอลลาร์ด
ขั้นตอนวิธีพีลบหนึ่งของพอลลาร์ด (อังกฤษ: Pollard's p - 1 algorithm) เป็นขั้นตอนวิธีในการหาตัวประกอบของจำนวนเต็มโดยใช้แนวคิดทางทฤษฎีจำนวนเป็นพื้นฐาน ขั้นตอนวิธีดังกล่าว จอห์น พอลลาร์ด (John Pollard) นำเสนอขึ้นในปี 1974
แนวคิดพื้นฐาน
แก้ขั้นตอนวิธีพีลบหนึ่งของพอลลาร์ดมีพื้นฐานอยู่บนทฤษฎีบทเล็กของแฟร์มาต์ สำหรับจำนวนเต็ม a ซึ่งเป็นจำนวนเฉพาะสัมพัทธ์กับ p และสำหรับจำนวนเต็มบวก K แล้ว
ถ้า x เป็นสมภาคกับ 1 มอดุโลด้วยตัวประกอบหนึ่งของ n เมื่อ n คือจำนวนเต็มที่ต้องการหาตัวประกอบ แล้วตัวประกอบนั้นๆ ย่อมต้องหารตัวหารร่วมมากของ x - 1 และ n ได้ลงตัว ในการเลือกเต็มบวก K นั้นเพื่อนำไปหาร p - 1 นั้น มันจะให้ K เกิดผลคูณของเลขยกกำลังของจำนวนเฉพาะหลายๆ ตัว โดยมากแล้วมักจะเลือกจำนวนเฉพาะที่จะมาใช้เป็นตัวประกอบนั้นไม่ให้มีค่าเกินค่าๆ หนึ่ง (ในที่นี้จะขอเรียกว่า B) เริ่มจากการสุ่มตัวเลข x มาหนึ่งตัว แล้วแทนค่าของ x ด้วย เมื่อ w แทนจำนวนเฉพาะที่ใช้เป็นเลขยกกำลัง ซึ่งขั้นตอนวิธีจะหาตัวประกอบของจำนวนเต็ม n ได้ก็ต่อเมื่อตัวหารร่วมมากของ x - 1 และ n ไม่เท่ากับ 1
ขั้นตอนวิธี และอัตราการเติบโต
แก้- ข้อมูลขาเข้า: จำนวนประกอบ n
- ข้อมูลขาออก: ตัวประกอบของ n หรือข้อผิดพลาด (ในกรณีที่หาตัวประกอบไม่พบ)
- เลือกขอบเขตบน B ของจำนวนเฉพาะที่จะนำมาใช้เป็นตัวประกอบของจำนวนเต็ม' K
- สุ่มเลือก a ซึ่งเป็นจำนวนเฉพาะสัมพัทธ์กับ p (ข้อสังเกต: อย่างไรก็ตาม สามารถกำหนดค่าของ a ได้เองเลย เนื่องจากการสุ่มเลือกในขั้นตอนนี้ยังไม่จำเป็นเท่าไรนัก)
- (โดยระหว่างการคำนวณ ให้ทำการมอดุโลด้วย n ควบคู่ไปด้วย)
- ถ้า 1 < g < n นั่นคือพบตัวประกอบแล้ว ให้คืนค่า g
- ถ้า g = 1 หรือ g = n ให้กลับไปเลือกค่า B ใหม่ที่มากกว่าเดิม แล้วย้อนกลับไปทำขั้นตอนที่ 2 อีกครั้ง หรือแสดงข้อผิดพลาดว่าหาไม่พบ
อัตราการเติบโตของขั้นตอนวิธีนี้คือ O(B × log B × log2n) โดยยิ่ง B มีค่ามาก ยิ่งทำให้ทำงานช้า แต่ทำให้โอกาสที่จะหาตัวประกอบพบนั้นเพิ่มมากขึ้น
ตัวอย่างการหาตัวประกอบ
แก้ต้องการหาตัวประกอบของ n = 2987 โดยให้ a = 2 และ M = 7! (ในที่นี้จะขอเลือก M = 7 เพื่อความสะดวกในการแสดงตัวอย่างการคำนวณ) ด้วยขั้นตอนวิธีพีลบหนึ่งของพอลลาร์ด จึงต้องคำนวณหา ซึ่งคำนวณได้จาก
ซึ่งจะได้ลำดับของการคำนวณ ดังนี้
จากนั้น นำค่า 755 ที่ได้ไปลบออกหนึ่ง แล้วคำนวณหาตัวหารร่วมมากระหว่าง 755 -1 กับ n จะได้ว่า
นั่นคือ 29 เป็นตัวประกอบหนึ่งของ 2987 นั่นเอง
อ้างอิง
แก้- Burton, David M. (2007), "Section 16.2: Primality Testing and Factorization", Elementary Number Theory (Sixth ed.), The McGraw-Hill Companies, NY: McGraw-Hill, pp. 356–357, ISBN 0071244255
- Pollard, J. M. (1974), "Theorems of Factorization and Primality Testing", Proceedings of the Cambridge Philosophical Society, 76 (3): 521–528, doi:10.1017/S0305004100049252