MATLAB, 103 99 97 95 93 byte
Tôi đang thử một số thứ khác nhau và làm việc này để tiết kiệm một vài byte:
eval([regexprep(input(''),{'.+?1(.+)\),','(\d)x'},{'x=str2num(''$1'');disp(~','$1\*x'}) 41]);
Nếu tôi có thể giảm điều đó xuống hơn nữa, tôi sẽ đăng một lời giải thích.
Mã cũ một lời giải thích
t=sscanf(input(''),'(x^1%d),%s')';x=-t(1);disp(~eval(regexprep([t(2:end) ''],'(\d)x','$1\*x')))
Điều này cũng hoạt động với Octave . Bạn có thể thử nó trực tuyến . Tôi đã lưu chương trình dưới dạng tập lệnh có tên isFactor.m, vì vậy bạn chỉ cần nhập isFactortại dấu nhắc. [Lưu ý: trong Octave sẽ đưa ra cảnh báo trong khi chạy - MATLAB không tạo ra điều này].
Đầu vào phải ở định dạng '(x^1+7),(x^2-49)'theo câu hỏi. Các dấu ngoặc kép được thêm vào để MATLAB / Octave biết đó là một chuỗi.
Đầu ra là a 0hoặc a 1tùy thuộc vào việc nó đúng hay sai.
Vì vậy, mã hoạt động như sau. Đầu tiên chúng tôi yêu cầu một đầu vào, và sau đó phân tích nó. Chuỗi phân tích trích xuất số đã ký sau số đầu tiên (x^1trong chuỗi - đây là giá trị của chúng tôi n. Sau đó, nó tiếp tục trích xuất chuỗi ( %s) sau ),đầu vào - đây là biểu thức của chúng tôi.
t=sscanf(input(''),'(x^1%d),%s')';
Tiếp theo, chúng tôi trích xuất giá trị của nvà đặt xbằng với nó - chúng tôi sẽ đánh giá xem biểu thức có bằng 0 hay không n==x, vì vậy đây là lý do tại sao chúng tôi lưu trữ giá trị cho x. Ngoài ra, chúng tôi phủ nhận số được trích xuất, vì dấu trừ khi phân tích cú pháp.
x=-t(1);
Sau đó chúng tôi sẽ hiển thị đầu ra là một boolean
disp(
Đầu ra về cơ bản là phủ định logic của phương trình được đánh giá của chúng tôi. Nếu f(x)bằng 0, điều này sẽ trả về 1, nếu không nó sẽ dẫn đến 0.
~eval(
Chúng tôi đang đánh giá biểu thức đầu vào, nhưng để làm điều này, chúng tôi cần định dạng lại nó một chút để MATLAB có thể hiểu. Khi chúng ta đọc chuỗi, nó thực sự là một mảng doublekiểu, vì vậy chúng ta cần chuyển đổi nó thành một mảng ký tự. Trước khi chuyển đổi, chúng tôi cũng loại bỏ yếu tố đầu tiên vì đó là những gì chúng tôi sử dụng cho n. Sau đó, chúng ta cần thay thế bất kỳ sự xuất hiện nào xảy ra xtrước một số (ví dụ 4x) bằng cùng một điều nhưng bằng dấu nhân ( *) ở giữa để MATLAB có thể tính toán nó.
regexprep(char([t(2:end) ''],'(\d)x','$1\*x')
)
)