Nó có phải là một yếu tố của một đa thức?


11

Một đa thức chia hết cho một thừa số (x-n)nếu f(n)=0cho một hàm f. Công việc của bạn: để xác định xem một hàm đa thức f(x)có chia hết cho không (x-n).

Đầu vào

Các đầu vào ở dạng (x-n), (Polynomial). Hãy nhớ rằng, nếu n âm, (x-n)sẽ ở dạng đầu vào(x+n) . Đối với đa thức, tất cả các số mũ sẽ được đưa vào dưới dạng ^. Các hệ số sẽ được viết bên cạnh biến x. Một ví dụ đa thức có thể là 2x^2 + x^1. Sẽ không có khoảng cách giữa bất cứ thứ gì. Thuật ngữ xsẽ được nhập vào như x^1. Vì vậy, những gì sẽ "bình thường" trông (x - 1)sẽ như thế nào (x^1-1). Các hệ số và quyền hạn sẽ luôn là số nguyên. Hệ số một sẽ được ẩn nếu nó chỉ x. Tức là, xcó thể được hiểu là1x

Đầu ra

Một giá trị boolean. Sự thật, hay Falsey.

Cảm ơn @AlexA. Để giúp tôi làm rõ điều này!

Ví dụ

Input:(x^1-1),(x^1-1)
Output: True

Input: (x^1+2),(2x^2+4x^1+2)
Output: False

Input: (x^1+7),(x^2-49)
Output: True

Quy tắc

  • Đây là , vì vậy mã ngắn nhất tính bằng byte thắng

Thật không may, tôi không biết cách triển khai bảng xếp hạng đoạn trích. Nếu bất cứ ai biết làm thế nào, hãy chỉnh sửa bài viết.


Đầu vào sẽ là một chuỗi có dạng chính xác đó, tức là parens xung quanh ứng cử viên chia, dấu phẩy có 0 hoặc một khoảng trắng và parens quanh đa thức?
Alex A.


Chắc chắn không phải là một bản sao của điều đó.
intboolopes

@intrepidcoder Đây không phải là một bản sao vì câu hỏi không phải là yếu tố đa thức. Đó là để xem nếu một đa thức có thể được chia cho một yếu tố tuyến tính.
intboolopes

Các hệ số đa thức sẽ luôn là số nguyên?
Chấn thương kỹ thuật số

Câu trả lời:


5

Pyth - 39 byte

Đây là một sự kết hợp quái dị của regrec và eval. Tôi thích cách tiếp cận, nhưng sẽ cố gắng cải thiện việc thực hiện.

Nó sử dụng Định lý còn lại đa thức .

K_sPe:z"-|\+"3!v.ssXPtw,\^\x,"**""*K"\*

Không hoạt động trực tuyến vì sử dụng eval.


3

Casio cơ bản, 19 byte

judge(mod(b,a)=0

Hóa ra, fx-CP400 có thể thực hiện modcác biểu thức đại số!

Đa thức và yếu tố nên được nhập dưới dạng biểu thức. 16 byte cho mã, 3 byte để nhập a,bvào hộp giá trị tham số.


1

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')
     )
)

1

VBScript, 118 116 byte

a=inputbox(""):for i=0 to 9:a=replace(a,i&"x",i&"*x"):next:b=split(a,","):x=-eval(b(0)):msgbox not cbool(eval(b(1)))

Vì chúng ta biết rằng phần đầu tiên của đầu vào là một đa thức tuyến tính, chúng ta chỉ cần kiểm tra xem gốc của nó có khớp với đa thức thứ hai không; và chúng ta cần chuẩn bị thuật ngữ cho evalbằng cách chèn *khi cần thiết.


1

Tiên đề 77 180 byte

f(a:UP(x,INT),b:UP(x,INT)):Boolean==(ground?(a)or ground?(b)=>false;p:=b;r:=a;if degree(a::POLY INT,x)>degree(b::POLY INT,x)then(p:=a;r:=b);(p rem r)$UP(x,FRAC INT)~=0=>false;true)

giải pháp trước

v(a,b)==(ground?(a) or ground?(b) or (b rem a)$UP(x,FRAC INT)~=0=>false;true)

đã sai vì nó giả sử độ (b)> = độ (a) một lỗi tôi đã viết ... kiểm tra và kết quả

(3) -> f(x^1-1,x^1-1)
   (3)  true
                                                            Type: Boolean
(4) -> f(x^1+1,2*x^2+4*x^1+2)
   (4)  true
                                                            Type: Boolean
(5) -> f(x^1+2,2*x^2+4*x^1+2)
   (5)  false
                                                            Type: Boolean
(6) -> f(x^1+7,x^2-49)
   (6)  true
                                                            Type: Boolean
(7) -> f(1, 1)
   (7)  false
                                                            Type: Boolean
(8) -> f(1, x^2+1)
   (8)  false
                                                            Type: Boolean
(9) -> f(x^8-1, x^2-1)
   (9)  true
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.