บทนำ / ความเป็นมา
ในการสนทนาเมื่อเร็ว ๆ นี้ในการแชท cryptoฉันถูกท้าทายให้พูดคุย / ช่วยเหลือเกี่ยวกับการทดสอบแบบดั้งเดิมของแฟร์มาต์และหมายเลขคาร์ไมเคิล การทดสอบนี้ขึ้นอยู่กับสถานที่ตั้งที่a^(p-1) mod p==1
จะถือเป็นช่วงเวลาp
เสมอ แต่ไม่เสมอไปสำหรับคอมโพสิต ขณะนี้จำนวน Carmichael เป็นหลักทดสอบศัตรูที่เลวร้ายที่สุดของแฟร์มาต์: จำนวนที่คุณต้องเลือกa
ที่จะไม่ร่วมกับนายกรัฐมนตรีที่จะได้รับp
a^(p-1) mod p!=1
ทีนี้ถ้าa
ไม่ใช่เพื่อนร่วมคุณก็พบว่าปัจจัยที่ไม่ใช่เรื่องไร้สาระp
และอย่างที่เราทุกคนรู้ว่าแฟคตอริ่งนั้นค่อนข้างยาก โดยเฉพาะอย่างยิ่งหากปัจจัยทั้งหมดมีขนาดใหญ่พอสมควร ตอนนี้คุณอาจรู้ว่าทำไมการทดสอบแฟร์มาต์ไม่ได้ถูกใช้ในทางปฏิบัติบ่อยครั้ง (มีอัลกอริธึมที่ดีกว่า) เนื่องจากมีตัวเลขที่คุณเป็นผู้พิทักษ์ ผู้โจมตี (คือปัจจัยจำนวน)
ตอนนี้เรารู้แล้วว่าทำไมตัวเลขเหล่านี้ถึงน่าสนใจเราจะสร้างมันขึ้นมาให้สั้นที่สุดเท่าที่จะเป็นไปได้ดังนั้นเราสามารถจำรหัสการสร้างได้หากเราต้องการ!
หมายเลขร์ไมเคิลยังเป็นที่รู้จักA002997 ใน OEIS
มีความท้าทายที่เกี่ยวข้องอยู่แล้ว แต่รายการจากที่นั่นไม่สามารถแข่งขันได้ที่นี่เพราะสิ่งเหล่านี้ได้รับการปรับให้เหมาะสมกับความเร็วเมื่อเทียบกับขนาด อาร์กิวเมนต์เดียวกันถือสำหรับทิศทางผกผันรายการที่นี่มีแนวโน้มที่จะทำให้การแลกเปลี่ยนกับความเร็วในความโปรดปรานของขนาด
สเปค
อินพุต
นี่คือมาตรฐาน ลำดับความท้าทายดังนั้นคุณจึงใช้จำนวนเต็มบวกหรือไม่ใช่ลบn
เป็นอินพุต n
อาจเป็นดัชนี 0- หรือ 1 ตามที่คุณต้องการ (โปรดระบุ)
เอาท์พุต
ผลลัพธ์ของคุณอาจเป็นn
หมายเลข -m carmichael หรือn
หมายเลข carmichael แรกตามที่คุณต้องการ (โปรดระบุ)
สเปค
จำนวนเต็มx
คือจำนวนคาร์ไมเคิถ้าหากx
เป็นคอมโพสิตและสำหรับจำนวนเต็มทั้งหมดy
ที่มีก็ถือได้ว่าgcd(x,y)=1
y^(x-1) mod x==1
ใครชนะ?
นี่คือ รหัสกอล์ฟดังนั้นรหัสที่สั้นที่สุดในไบต์ชนะ!
ใช้กฎ IO มาตรฐานและช่องโหว่
กรณีทดสอบ
ตัวเลข carmichael สองสามตัวแรกคือ:
561,1105,1729,2465,2821,6601,8911,10585,15841,
29341,41041,46657,52633,62745,63973,75361,101101,
115921,126217,162401,172081,188461,252601,278545,
294409,314821,334153,340561,399001,410041,449065,
488881,512461