Đa thức nguyên tố


21

Đưa ra một đa thức, xác định xem nó là số nguyên tố.

Một đa thức là ax^n + bx^(n-1) + ... + dx^3 + ex^2 + fx + g, trong đó mỗi số hạng là một số không đổi (hệ số) nhân với một công suất nguyên không âm của x. Công suất cao nhất với hệ số khác không được gọi là độ. Đối với thử thách này, chúng tôi chỉ xem xét các đa thức ít nhất là độ 1. Nghĩa là, mỗi đa thức đều chứa một số x. Ngoài ra, chúng tôi chỉ sử dụng đa thức với các hệ số nguyên.

Đa thức có thể được nhân lên. Ví dụ, (x+3)(2x^2-2x+3)bằng 2x^3+4x^2-3x+9. Vì vậy, 2x^3+4x^2-3x+9có thể được bao gồm trong x+32x^2-2x+3, vì vậy nó là tổng hợp.

Các đa thức khác không thể là yếu tố. Ví dụ, 2x^2-2x+3không phải là tích của hai đa thức (bỏ qua các đa thức không đổi hoặc các đa thức có hệ số không nguyên). Do đó, nó là số nguyên tố (còn được gọi là không thể giảm).

Quy tắc

  • Đầu vào và đầu ra có thể thông qua bất kỳ cách tiêu chuẩn.
  • Đầu vào có thể là một chuỗi như 2x^2-2x+3, một danh sách các hệ số thích {2,-2,3}hoặc bất kỳ phương tiện tương tự nào.
  • Đầu ra là giá trị trung thực nếu là số nguyên tố hoặc giá trị falsey nếu là giá trị tổng hợp. Bạn phải mang lại cùng một giá trị trung thực cho tất cả các số nguyên tố và cùng một giá trị falsey cho tất cả các đa thức tổng hợp.
  • Đầu vào sẽ có ít nhất là độ 1 và nhiều nhất là độ 10.
  • Bạn không được sử dụng các công cụ tích hợp để xác định (số nguyên hoặc biểu thức) hoặc giải phương trình.

Ví dụ

Đúng - nguyên tố

x+3
-2x
x^2+x+1
x^3-3x-1
-2x^6-3x^4+2
3x^9-8x^8-3x^7+2x^3-10

Sai - tổng hợp

x^2
x^2+2x+1
x^4+2x^3+3x^2+2x+1
-3x^7+5x^6-2x
x^9-8x^8+7x^7+19x^6-10x^5-35x^4-14x^3+36x^2+16x-12

11
Từ một số googling nhanh chóng, đây là một vấn đề khó khăn bất kể chơi golf.
orlp

5
Tôi có đúng không khi nghĩ rằng theo nguyên tắc bạn có nghĩa là không thể sửa chữa ? Nếu vậy thì đây về cơ bản là một biến thể của câu hỏi này về đa thức bao thanh toán , và tôi nghi ngờ rằng nó sẽ không thu hút bất kỳ câu trả lời nào không có yếu tố.
Peter Taylor

1
Theo bài báo gần đây , " Chúng tôi quan tâm đến câu hỏi quyết định xem một đa thức đã cho có phải là không thể thực hiện được hay không. Do đó, một thử nghiệm hoặc tiêu chí đơn giản sẽ cung cấp thông tin này là mong muốn. Thật không may, không có tiêu chí nào áp dụng cho tất cả các lớp đa thức vẫn chưa được đưa ra ".
Peter Taylor

2
@AlexA., Có rất nhiều bài kiểm tra "nếu" hoạt động cho một số đa thức, nhưng câu hỏi là yêu cầu kiểm tra "nếu và chỉ khi" hoạt động cho tất cả các đa thức.
Peter Taylor

1
Đây là một vấn đề tốt đẹp! Lưu ý rằng thông thường đa thức chỉ là số nguyên tố liên quan đến vòng cơ sở (hoặc trường). Cụ thể, nếu trường là các số phức, thì không có đa thức bậc 2 lớn hơn 2 là số nguyên tố. Vì vậy, tôi sẽ xác định xem bạn muốn Số nguyên Rational (có lẽ là đơn giản nhất) (điều này cũng sẽ liên quan đến một số bao thanh số nguyên), hoặc modulo một số số m. Nếu m là số nguyên tố, thì có các thuật toán khá dễ dàng. Nếu không, mọi thứ sẽ phức tạp hơn một chút ... (nhưng khả thi)
cody

Câu trả lời:


3

Toán học, 224 byte

f@p_:=(e=p~Exponent~x;r=Range[⌈e/-4⌉,(e+2)/4];e<2||FreeQ[PolynomialRemainder[p,Thread@{r,#}~InterpolatingPolynomial~x,x]&/@Tuples[#~Join~-#&[Join@@Position[#/Range@Abs@#,_Integer]]&/@#]~DeleteCases~{(a_)..},0|{}]&[p/.x->r])

Giải thích :

Phương pháp Kronecker được sử dụng ở đây. Phương pháp này tạo ra các đa thức bậc thấp nhất định và kiểm tra xem có tồn tại một yếu tố của đa thức ban đầu hay không.

Các trường hợp thử nghiệm :

f/@{x+3, -2x, x^2+x+1, x^3-3x-1, -2x^6-3x^4+2, 3x^9-8x^8-3x^7+2x^3-10}
(* {True, True, True, True, True, True} *)

f/@{x^2, x^2+2x+1, x^4+2x^3+3x^2+2x+1, -3x^7+5x^6-2x, x^9-8x^8+7x^7+19x^6-10x^5-35x^4-14x^3+36x^2+16x-12}
(* {True, True, True, True, True} *)

Phải mất 14 giây trên máy tính xách tay của tôi để kết luận đó 3x^9-8x^8-3x^7+2x^3-10là nguyên tố.


1

PARI / GP, 16 byte, rẻ như địa ngục

Vì một số lý do, điều này không được phép (lưu ý rằng lệnh không phải là yếu tố hoặc giải phương trình):

polisirreducible

Trường hợp thử nghiệm

%(x^2+x+1)

trả về 1(đúng). Các ví dụ khác hoạt động tương tự.

Nhưng để cho thấy rằng điều này có thể giải quyết được một cách khó khăn, đây là một giải pháp đầy đủ.

Ít rẻ hơn, nhưng sloooooooooow

Thực sự không có điểm đánh gôn này.

Beauzamy(P)=
{
  my(d=poldegree(P),s,c);
  s=sum(i=0,d,polcoeff(P,i)^2/binomial(d,i));
  c = 3^(3/2 + d);
  c *= s / (4*d*Pi);
  abs(c * pollead(P))
}
factorpol(P)=
{
  my(B=Beauzamy(P)\1, t=B*2+1, d=poldegree(P)\2, Q);
  for(i=0,t^(d+1)-1,
    Q=Pol(apply(n->n-B, digits(i,t)));
    if(Q && poldegree(Q) && P%Q==0, return(Q))
  );
  0
}
irr(P)=
{
  factorpol(P)==0
}

Chỉnh sửa: Các nhà bình luận đã chỉ ra rằng phương pháp đầu tiên có thể không được chấp nhận bởi hương vị tốt, tinh thần của các quy tắc, Công ước Geneva, quy tắc kẽ hở tiêu chuẩn, v.v. Tôi không đồng ý, nhưng trong mọi trường hợp tôi đã đăng phiên bản thứ hai cùng với đầu tiên và chắc chắn nó có vẻ chấp nhận được


1
Hmmmm ... Tôi khá chắc chắn rằng lệnh này có yếu tố và / hoặc giải phương trình dưới mui xe. (Ngoài ra, nếu một thách thức không tuân theo một số tích hợp nhất định thì có nghĩa là một tích hợp chỉ giải quyết vấn đề cũng không nằm trong tinh thần của thử thách.)
Martin Ender

@ MartinBüttner: Tôi nghĩ rằng câu trả lời đầu tiên phù hợp với bức thư, nhưng không phải là tinh thần của các quy tắc của thách thức. Đó là lý do tại sao tôi viết phiên bản thứ hai, đó là một giải pháp hợp pháp. Nó có thể kiểm tra xem x^4+1(đó là mod có thể rút gọn nổi tiếng bất kỳ số nguyên tố nào) là không thể giảm được trong 86 mili giây. Nếu không có gì khác người khác có thể thích nghi và chơi golf phiên bản này.
Charles

1
Câu trả lời đầu tiên rơi vào kẽ hở bị cấm theo mặc định: Sử dụng các hàm tích hợp để thực hiện công việc . Vui lòng xóa nó khỏi câu trả lời của bạn, hoặc ít nhất chỉ ra rằng đó không phải là một giải pháp hợp lệ.
isaacg

5
@isaacg Đó không phải là một lỗ hổng tiêu chuẩn hợp lệ (do sự cố phiếu bầu + 44 / -29). Charles, nếu bạn đồng ý rằng chỉ có câu trả lời thứ hai là thực sự hợp pháp, thì bạn nên bao gồm số byte của nó thay vào đó.
Martin Ender

@ MartinBüttner: Tôi không - Tôi nghĩ cả hai đều hợp pháp bởi các quy tắc của câu hỏi này và chủ đề sơ hở chung. Nhưng tôi đã thêm một bình luận để chỉ ra vấn đề.
Charles
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.