คำนวณค่า p-adic norm ของจำนวนตรรกยะ
เขียนฟังก์ชั่นหรือโปรแกรมที่ใช้จำนวนเต็ม 3 จำนวนm,n,p
(ซึ่งp
เป็นจำนวนเฉพาะที่เป็นค่าบวก) เป็นอินพุตซึ่งส่งเอาต์พุต p-adic norm (แทนด้วย|m/n|_p
) เป็นส่วน (ลดลงอย่างสมบูรณ์) แฟร์มาต์เป็นที่รู้จักกันว่ามีกำไรเพียงเล็กน้อยเท่านั้น แต่สิ่งที่ไม่เป็นที่รู้จักคือเขามีหน้าจอคอมพิวเตอร์ขนาดเล็กมาก ดังนั้นพยายามทำให้รหัสสั้นที่สุดเท่าที่จะเป็นไปได้เพื่อให้พอดีกับหน้าจอของแฟร์มาต์!
คำนิยาม
กำหนดที่สำคัญp
ทุกส่วนm/n
สามารถเขียนได้โดยไม่ซ้ำกัน (ไม่สนใจสัญญาณ) เป็น(a/b)* p^e
เช่นที่e
เป็นจำนวนเต็มและp
แบ่งค่ามิได้a
บรรทัดฐาน p- อำนวยการของการมี มีกรณีพิเศษคือถ้าส่วนเป็น 0:b
m/n
p^-e
|0|_p = 0
รูปแบบผลลัพธ์จะต้องx/y
(เช่น1/3
สำหรับจำนวนเต็มทั้งสอง10
หรือเท่ากัน10/1
ได้รับอนุญาตสำหรับจำนวนลบจะต้องมีเครื่องหมายลบนำหน้าเช่น-1/3
)
รายละเอียด
โปรแกรมจะต้องใช้ stdin / stdout หรือเพียงแค่ประกอบด้วยฟังก์ชั่นที่ส่งกลับจำนวนเหตุผลหรือสตริง คุณต้องสมมติว่าอินพุตm/n
ไม่ได้ลดลงอย่างสมบูรณ์ คุณสามารถสันนิษฐานว่าp
เป็นนายก โปรแกรมจะต้องสามารถประมวลผลจำนวนเต็มตั้งแต่-2^28
ถึง2^28
และไม่ควรใช้เวลามากกว่า 10 วินาที
ไม่อนุญาตให้สร้างการแยกตัวประกอบและฟังก์ชันตรวจสอบเฉพาะเช่นเดียวกับที่สร้างขึ้นในการแปลงฐานและฟังก์ชันในตัวที่คำนวณค่า p-adic หรือบรรทัดฐาน
ตัวอย่าง (ถูกขโมยจากวิกิพีเดีย ):
x = m/n = 63/550 = 2^-1 * 3^2 * 5^-2 * 7 * 11^-1
|x|_2 = 2
|x|_3 = 1/9
|x|_5 = 25
|x|_7 = 1/7
|x|_11 = 11
|x|_13 = 1
เรื่องไม่สำคัญที่น่าสนใจ
(ไม่จำเป็นต้องรู้ / อ่านสำหรับความท้าทายนี้ แต่อาจจะดีในการอ่านเป็นแรงจูงใจ)
(โปรดแก้ไขให้ฉันด้วยถ้าฉันใช้คำผิดหรืออย่างอื่นไม่ถูกต้องฉันไม่คุ้นเคยกับการพูดภาษาอังกฤษ)
หากคุณพิจารณาสรุปตัวเลขเป็นเขตข้อมูลแล้วบรรทัดฐาน p- d_p(a,b) = |a-b|_p
อำนวยการเจือจางเมตริก จากนั้นคุณสามารถกรอกข้อมูลในฟิลด์นี้โดยคำนึงถึงตัวชี้วัดนี้ซึ่งหมายความว่าคุณสามารถสร้างฟิลด์ใหม่ที่ลำดับ cauchy ทั้งหมดมาบรรจบกันซึ่งเป็นสมบัติเชิงทอพอโลยีที่ดี (ซึ่งเช่นหมายเลขที่ไม่มีเหตุผล แต่ไม่มี reals ทำ) ตัวเลข p-adicเหล่านี้เป็นตามที่คุณอาจเดาได้ใช้ทฤษฎีจำนวนมาก
ผลลัพธ์ที่น่าสนใจอีกอย่างคือทฤษฎีบทของ Ostrowskiซึ่งโดยพื้นฐานแล้วบอกว่าค่าสัมบูรณ์ใด ๆ (ตามที่นิยามไว้ด้านล่าง) ในจำนวนตรรกยะคือหนึ่งในสามของดังต่อไปนี้:
- เรื่องไม่สำคัญ:
|x|=0 iff x=0, |x|=1 otherwise
- มาตรฐาน (ของจริง):
|x| = x if x>=0, |x| = -x if x<0
- p-adic (ตามที่เรากำหนดไว้)
ค่าสัมบูรณ์ / ตัวชี้วัดเป็นเพียงทั่วไปของสิ่งที่เราพิจารณาเป็นระยะ ค่าสัมบูรณ์เป็น|.|
ไปตามเงื่อนไขต่อไปนี้:
|x| >= 0 and |x|=0 if x=0
|xy| = |x| |y|
|x+y| <= |x|+|y|
โปรดทราบว่าคุณสามารถสร้างเมตริกได้อย่างง่ายดายจากค่าสัมบูรณ์และในทางกลับกัน: |x| := d(0,x)
หรือd(x,y) := |x-y|
ดังนั้นจึงเกือบจะเหมือนกันถ้าคุณสามารถเพิ่ม / ย่อ / ขยาย / คูณ (นั่นคือในโดเมนที่สมบูรณ์) แน่นอนคุณสามารถกำหนดเมตริกในชุดทั่วไปเพิ่มเติมโดยไม่มีโครงสร้างนี้
|x|_11 = 11
ใช่ไหม หรือไม่11
เป็นไร และมันต้องจัดการกับx=0
คดีนี้หรือไม่?
x=0
กรณีเช่นนี้คุณสามารถส่งออก11
เช่นเดียวกับแต่คุณจะได้ไม่ต้องพิมพ์11/1
|x|_11
PadicNorm
ฟังก์ชั่นของ Mathematica นั้นออกมาแล้วเช่นกัน? : P