คำนวณค่า 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:bm/np^-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