ในความท้าทายนี้เราเรียนรู้วิธีเข้ารหัสจำนวนเต็มบวกทุกตัวโดยใช้ทรีแฟคเตอร์
นี่คือวิธีการทำงาน:
สตริงว่างมีค่า 1
(S)
โดยที่S
นิพจน์ใด ๆ ที่มีค่าของSจะประเมินไปที่S th primeAB
ที่A
และB
มีการแสดงออก arbirary ที่มีค่าของและBตามลำดับมีค่าA * B
ตัวอย่างเช่นถ้าเราต้องการเป็นตัวแทน 7 เราจะทำ
7 -> (4) -> (2*2) -> ((1)(1)) -> (()())
ปรากฎว่าเราสามารถเป็นตัวแทนของจำนวนทั้งหมดโดยใช้วิธีนี้ ในความเป็นจริงเราสามารถแสดงตัวเลขได้หลายวิธี เพราะการคูณคือการสับเปลี่ยน 10 ทั้งคู่
((()))()
และ
()((()))
ในขณะเดียวกันตัวเลขบางตัวสามารถแสดงได้ใน 1 ทางเท่านั้น ยกตัวอย่าง 8 8 เท่านั้นที่สามารถแสดงเป็น
()()()
และเนื่องจากอะตอมทั้งหมดของเราเหมือนกันเราจึงไม่สามารถใช้สับเปลี่ยนเพื่อจัดระเบียบอะตอมเหล่านั้นใหม่
ดังนั้นตอนนี้คำถามคือ "ตัวเลขใดที่สามารถแทนได้ใน 1 ทาง" ข้อสังเกตแรกคือสิ่งที่ฉันเพิ่งเริ่มทำที่นั่น ดูเหมือนว่าพลังที่สมบูรณ์แบบนั้นมีคุณสมบัติพิเศษบางอย่าง ภายใต้การตรวจสอบเพิ่มเติมเราสามารถหา 36 ซึ่งเป็น 6 2เป็นพลังที่สมบูรณ์แบบ แต่มีตัวแทนหลาย
(())()(())()
(())()()(())
()(())()(())
()(())(())()
()()(())(())
และนี่ก็สมเหตุสมผลเพราะ 6 สามารถจัดเรียงใหม่ได้ดังนั้นจำนวนใดก็ตามที่เราทำจาก 6 จะต้องจัดเรียงใหม่อีกครั้ง
ดังนั้นตอนนี้เรามีกฎ:
- จำนวนนั้นมีการแทนค่าที่ไม่ซ้ำกันถ้ามันเป็นพลังที่สมบูรณ์แบบของจำนวนที่มีการแสดงที่ไม่ซ้ำกัน
กฎนั้นสามารถช่วยเราลดการพิจารณาว่าหมายเลขคอมโพสิตนั้นไม่ซ้ำกันหรือไม่หากพิจารณาว่าหมายเลขเฉพาะนั้นไม่เหมือนใครหรือไม่ ตอนนี้เรามีกฎนั้นแล้วเราต้องการหาว่าอะไรทำให้มีค่าเฉพาะจำนวนมาก นี่เป็นสิ่งที่เห็นได้ชัดในตัวเอง ถ้าเราใช้ตัวเลขที่ไม่ซ้ำกันและใส่มันไว้ในวงเล็บผลลัพธ์จะต้องไม่ซ้ำกันและจะไปทางอื่นถ้าnมีตัวแทนหลายอันn ที่สำคัญต้องมีตัวแทนหลายอัน สิ่งนี้ให้กฎข้อที่สอง:
- nวันสำคัญที่เป็นเอกลักษณ์และถ้าหากnเป็นเอกลักษณ์
กฎทั้งสองนี้ซ้ำซ้ำดังนั้นเราจะต้องมีกรณีพื้นฐาน หมายเลขเฉพาะที่เล็กที่สุดคืออะไร? บางคนอาจถูกล่อลวงให้พูด 2 เพราะมันเป็นเพียง()
แต่ 1 สตริงว่างเปล่านั้นเล็กกว่าและมีเอกลักษณ์
- 1 มีเอกลักษณ์
ด้วยกฎทั้งสามนี้เราสามารถพิจารณาได้ว่าตัวเลขนั้นมีทรีปัจจัยเฉพาะหรือไม่
งาน
คุณอาจเห็นว่ามันกำลังจะมา แต่หน้าที่ของคุณคือการใช้จำนวนเต็มบวกและพิจารณาว่ามันไม่ซ้ำกันหรือไม่ คุณควรเขียนโปรแกรมหรือฟังก์ชั่นที่ทำการคำนวณนี้ คุณควรส่งออกหนึ่งในสองค่าที่เป็นไปได้สิ่งที่ค่าเหล่านี้ขึ้นอยู่กับคุณ แต่หนึ่งควรเป็นตัวแทนของ "ใช่" การส่งออกเมื่อมีการป้อนข้อมูลที่ไม่ซ้ำกันและอย่างใดอย่างหนึ่งควรเป็นตัวแทน
คำตอบของคุณควรได้คะแนนเป็นไบต์โดยไบต์น้อยกว่าจะดีกว่า
กรณีทดสอบ
นี่คือตัวเลขที่ไม่ซ้ำกันสองคนแรก:
1
2
3
4
5
7
8
9
11
16
17
19
23
25
27
31
กรณีทดสอบที่แนะนำ
5381 -> Unique
ดูเหมือนว่าOEIS A214577มีความเกี่ยวข้องอย่างใดดังนั้นหากคุณต้องการกรณีทดสอบเพิ่มเติมลองที่นั่น แต่ฉันไม่รู้ว่าพวกมันเหมือนกันดังนั้นให้ใช้ความเสี่ยงของคุณเอง