เราต้องการที่จะ factorize semiprime Nเป้าหมายของการท้าทายนี้คือการหาจำนวนเต็มสองจำนวนขนาดเล็กUและvดังกล่าวว่ายูv Nสามารถ factorized นิด ๆ ด้วยวิธีการของแฟร์มาต์จึงอนุญาตให้หักค่าใช้จ่ายได้อย่างง่ายดายปัจจัยของN
งาน
รับsemiprime และจำนวนเต็มบวกkเรานิยามxและyเป็น:
y=x2-kN
ขั้นตอนที่ # 1 - ค้นหา
ก่อนอื่นคุณต้องหาค่าที่เป็นไปได้ที่เล็กที่สุดของดังกล่าวว่าปีเป็นจำนวนตาราง ( akaตารางที่สมบูรณ์)
นี้จะช่วยให้ Factorize ด้วยซ้ำเดียวของวิธีการแยกตัวประกอบของแฟร์มาต์ ยิ่งเป็นรูปธรรมสิ่งนี้นำไปสู่:
(อัปเดต: ลำดับนี้เผยแพร่ในขณะนี้เป็นA316780 )
ขั้นตอนที่ # 2 - แยกตัวประกอบ
จากนั้นคุณต้องค้นหาจำนวนเต็มบวกทั้งสองตัวและvเช่นนั้น:
c u = x + √
ที่และDเป็นปัจจัยที่สำคัญของN
สรุป
งานของคุณคือการเขียนโปรแกรมหรือฟังก์ชั่นที่ใช้เป็นอินพุตและพิมพ์หรือส่งออกuและvในลำดับใด ๆ และรูปแบบที่เหมาะสม
ตัวอย่าง
ลองพิจารณา
ขั้นตอนที่ 1
ค่าที่เล็กที่สุดที่เป็นไปได้ของคือ40ซึ่งให้:
y=28232-40×199163=7969329-7966520=2809=532kN=(2823+53)×(2823-53)kN=2876×2770
ขั้นตอนที่ 2
การแยกตัวประกอบที่ถูกต้องของคือk = 4 × 10เพราะ:
กฎระเบียบ
- อินพุตรับประกันว่าจะเป็น semiprime
- นี่คือโค้ดกอล์ฟดังนั้นคำตอบที่สั้นที่สุดในหน่วยไบต์ชนะ
- ช่องโหว่มาตรฐานเป็นสิ่งต้องห้าม
กรณีทดสอบ
N | k | Output
-----------+------+------------
143 | 1 | [ 1, 1 ]
2519 | 19 | [ 1, 19 ]
199163 | 40 | [ 4, 10 ]
660713 | 1 | [ 1, 1 ]
4690243 | 45 | [ 9, 5 ]
11755703 | 80 | [ 40, 2 ]
35021027 | 287 | [ 7, 41 ]
75450611 | 429 | [ 143, 3 ]
806373439 | 176 | [ 8, 22 ]
1355814601 | 561 | [ 17, 33 ]
3626291857 | 77 | [ 7, 11 ]
6149223463 | 255 | [ 17, 15 ]
6330897721 | 3256 | [ 74, 44 ]
ตัวอย่างการนำไปใช้
N
นั้นจะเป็นครึ่งปีหรือไม่?