Tính chỉ tiêu p-adic của một số hữu tỷ
Viết hàm hoặc chương trình, lấy 3 số nguyên m,n,p
(trong đó p
là số nguyên tố dương) làm đầu vào, đưa ra định mức p-adic (ký hiệu là |m/n|_p
) dưới dạng phân số (giảm hoàn toàn). Fermat được biết là chỉ có lợi nhuận rất nhỏ, nhưng điều chưa biết là anh ta chỉ có một màn hình máy tính rất nhỏ. Vì vậy, hãy cố gắng làm cho mã càng ngắn càng tốt để nó phù hợp với màn hình của Fermat!
Định nghĩa
Cho một số nguyên tố p
, mọi phân số m/n
có thể được viết duy nhất (bỏ qua các dấu) vì (a/b)* p^e
đó e
là một số nguyên và p
chia a
cũng không b
. Các chuẩn mực p-adic của m/n
là p^-e
. Có một trường hợp đặc biệt, nếu phân số là 0 : |0|_p = 0
.
Định dạng đầu ra phải là x/y
(ví dụ: 1/3
đối với các số nguyên cả hai 10
hoặc tương đương 10/1
đều được phép, đối với các số âm phải có một dấu trừ hàng đầu, ví dụ -1/3
)
Chi tiết
Chương trình phải sử dụng stdin / stdout hoặc chỉ bao gồm một hàm trả về số hoặc chuỗi hợp lý. Bạn phải giả định rằng đầu vào m/n
không được giảm hoàn toàn. Bạn có thể cho rằng đó p
là một nguyên tố. Chương trình phải có khả năng xử lý các số nguyên giữa -2^28
tối đa 2^28
và không mất quá 10 giây.
Các chức năng kiểm tra chính và nhân tố được xây dựng không được phép, cũng như được xây dựng trong hội thoại cơ sở và được xây dựng theo chức năng tính toán định giá hoặc định mức p-adic.
Ví dụ (bị đánh cắp từ wikipedia ):
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
Câu đố thú vị
(Không cần thiết phải biết / đọc cho thử thách này, nhưng có lẽ rất hay để đọc như một động lực.)
(Vui lòng sửa lại cho tôi nếu tôi sử dụng các từ sai, hoặc có gì đó sai, tôi không quen nói về điều này bằng tiếng Anh.)
Nếu bạn coi các số hữu tỷ là một trường, thì chỉ tiêu p-adic tạo ra số liệu p-adic d_p(a,b) = |a-b|_p
. Sau đó, bạn có thể hoàn thành trường này liên quan đến số liệu này, điều đó có nghĩa là bạn có thể xây dựng một trường mới nơi tất cả các chuỗi khó hiểu hội tụ, đây là một thuộc tính tô pô đẹp. (Ví dụ, số hữu tỷ không có, nhưng số thực thì có.) Những số p-adic này như bạn có thể đoán, được sử dụng rất nhiều trong lý thuyết số.
Một kết quả thú vị khác là định lý của Ostrowski về cơ bản nói rằng, bất kỳ giá trị tuyệt đối nào (như được định nghĩa dưới đây) trên các số hữu tỷ là một trong ba điều sau đây:
- Tầm thường:
|x|=0 iff x=0, |x|=1 otherwise
- Tiêu chuẩn (thực tế):
|x| = x if x>=0, |x| = -x if x<0
- P-adic (như chúng tôi đã định nghĩa nó).
Một giá trị tuyệt đối / một số liệu chỉ là sự khái quát hóa những gì chúng ta coi là khoảng cách . Một giá trị tuyệt đối |.|
thỏa mãn các điều kiện sau:
|x| >= 0 and |x|=0 if x=0
|xy| = |x| |y|
|x+y| <= |x|+|y|
Lưu ý rằng bạn có thể dễ dàng xây dựng các số liệu từ các giá trị tuyệt đối và ngược lại: |x| := d(0,x)
hoặc d(x,y) := |x-y|
, vì vậy chúng gần như giống nhau nếu bạn có thể thêm / trừ / nhân (đó là trong các miền tích phân). Tất nhiên bạn có thể định nghĩa một số liệu trên các bộ tổng quát hơn, không có cấu trúc này.
|x|_11 = 11
, phải không? Hay là 11
tốt? Và nó có phải xử lý x=0
vụ việc không?
x=0
tình huống và ví dụ này, bạn có thể sản lượng 11
cũng như 11/1
, nhưng bạn không cần phải in |x|_11
.
PadicNorm
chức năng của Mathicala cũng bị loại? : P