Không sử dụng bất kỳ hàm bao thanh toán / đa thức tích hợp nào, hãy biến một đa thức hoàn toàn thành các giá trị bất định trên các số nguyên hoặc một trường hữu hạn.
Đầu vào
Chương trình / chức năng của bạn sẽ nhận được một số số nguyên tố (hoặc số không) n
làm đầu vào. Trường / vòng là trường hữu hạn của thứ tự đó (nghĩa là Z/nZ
) hoặc chỉ là Z
nếu n
có 0
. Chương trình của bạn có thể thất bại nếu n
không 0
hoặc là một nguyên tố. Đa thức sẽ ở F[x]
.
Chương trình / hàm của bạn cũng sẽ nhận được đa thức làm đầu vào.
Có một số linh hoạt trong đầu vào, hãy chắc chắn để xác định cách bạn dự định nhận đầu vào. Ví dụ: đa thức có thể được nhập dưới dạng danh sách các hệ số hoặc ở dạng mà hầu hết mọi người mong đợi (ví dụ 50x^3 + x^2
:) hoặc một số dạng hợp lý khác. Hoặc định dạng nhập trường / vòng cũng có thể khác nhau.
Đầu ra
Chương trình / hàm của bạn sẽ xuất ra đa thức bao thanh toán. Bạn có thể để lại nhiều gốc mở rộng (tức là (x + 1)(x + 1)
thay vì (x + 1)^2
). Bạn có thể xóa khoảng trắng giữa các toán tử nhị phân. Bạn có thể thay thế vị trí kề nhau bằng *
. Bạn có thể chèn khoảng trắng vào những nơi kỳ lạ. Bạn có thể sắp xếp lại các yếu tố theo bất kỳ thứ tự nào bạn muốn. Các x
thuật ngữ chỉ có thể được (x)
. x
có thể được viết là x^1
; tuy nhiên thuật ngữ không đổi có thể không có x^0
. Không liên quan +
dấu hiệu cho phép. Bạn có thể không có một điều khoản với một 0
ở phía trước, họ phải bị bỏ lại. Thuật ngữ hàng đầu của mỗi yếu tố phải là tích cực, dấu hiệu tiêu cực phải ở bên ngoài.
Các trường hợp thử nghiệm, chương trình của bạn sẽ có thể tạo đầu ra cho từng trường hợp này trong thời gian hợp lý (giả sử <= 2 giờ):
Đầu vào: 2, x^3 + x^2 + x + 1
Đầu ra: (x + 1)^3
Đầu vào: 0, x^3 + x^2 + x + 1
Đầu ra: (x + 1)(x^2 + 1)
Đầu vào: 0, 6x^4 – 11x^3 + 8x^2 – 33x – 30
Đầu ra: (3x + 2)(2x - 5)(x^2 + 3)
Đầu vào: 5, x^4 + 4x^3 + 4x^2 + x
Đầu ra: x(x + 4)(x + 4)(x + 1)
Đầu vào: 0, x^5 + 5x^3 + x^2 + 4x + 1
Đầu ra: (x^3 + 4x + 1)(x^2 + 1)
Đặc biệt cảm ơn Peter Taylor đã phê bình các trường hợp thử nghiệm của tôi
p
có các phần tử {0, 1, ... , p-1}
và nó nằm dưới mod cộng / nhân p
. Về cơ bản, giảm bất kỳ hệ số nào bằng mod p
và bạn vẫn ổn. Ngoài ra, lưu ý rằng nếu nó có gốc, tức là yếu tố tuyến tính, một trong số đó {0, ... , p-1}
sẽ tạo ra 0
(mod p
) khi nó được cắm vào đa thức.
Z
là yếu tố Z/pZ
cho một p
thang máy Hensel phù hợp và sau đó. Tuy nhiên, cách tiếp cận có thể chơi gôn có lẽ (và đây chắc chắn là con đường tôi đang tìm kiếm) để sử dụng một ràng buộc đơn giản về chiều cao của các yếu tố và vũ lực.