Başbakan polinomları


21

Bir polinom verildiğinde, bunun asal olup olmadığını belirleyin.

Bir polinom, ax^n + bx^(n-1) + ... + dx^3 + ex^2 + fx + gher bir terimin negatif olmayan bir tamsayı gücü ile çarpılan sabit bir sayı (katsayı) olduğu durumdur x. Sıfır olmayan bir katsayılı en yüksek güç derecesi olarak adlandırılır. Bu zorluk için, sadece en az 1 derece polinomları göz önünde bulundururuz. Yani, her polinom bazı içerir x. Ayrıca, sadece tamsayı katsayılı polinomları kullanıyoruz.

Polinomlar çoğaltılabilir. Örneğin, (x+3)(2x^2-2x+3)eşittir 2x^3+4x^2-3x+9. Böylece, 2x^3+4x^2-3x+9faktoring yapılabilir x+3ve 2x^2-2x+3bu yüzden bileşiktir.

Diğer polinomlar faktoring edilemez. Örneğin, 2x^2-2x+3iki polinomun ürünü değildir (sabit polinomları veya tamsayı olmayan katsayılı olanları görmezden gelir). Bu nedenle, asal (aynı zamanda indirgenemez olarak da bilinir).

kurallar

  • Giriş ve çıkış herhangi bir standart yoldan olabilir.
  • Giriş, benzeri 2x^2-2x+3bir katsayı listesi {2,-2,3}veya benzeri bir araç olabilir.
  • Çıktı, asal ise bir truthy değeri veya kompozit ise bir falsey değeridir. Tüm primerler için aynı truthy değerini ve tüm kompozit polinomlar için aynı falsey değerini vermelisiniz.
  • Giriş en az 1 derece ve en fazla 10 derece olacaktır.
  • Faktoring (tamsayılar veya ifadeler) veya denklem çözme için yerleşik araçları kullanamazsınız.

Örnekler

Doğru - asal

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

Yanlış - bileşik

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
Bazı hızlı googlinglerden golf oynamak ne olursa olsun zor bir problem.
orlp

5
Ben tarafından bu düşünce haklı mıyım asal Şunu indirgenemez ? Eğer öyleyse, bu temelde polinomları çarpanlara ayırma hakkındaki bu sorudaki bir değişkendir ve faktör olmayan herhangi bir cevabı etkilemeyeceğinden şüpheleniyorum.
Peter Taylor

1
Göre bu son yazıda , " Biz belirli bir polinom indirgenemez olup olmadığını karar sorusuna ilgilenen edilir. Sonuç olarak, bu bilgiyi verecek basit bir test ya da kriter arzu edilir. Maalesef böyle bir kriter hangi uygulanacak tüm Polinom sınıfları henüz tasarlandı ".
Peter Taylor

2
@AlexA, bazı polinomlar için işe yarayan birçok "if" testi var , ancak soru tüm polinomlar için işe yarayan "eğer ve sadece eğer" testini soruyor.
Peter Taylor

1
Bu güzel bir problem! Genellikle polinomların yalnızca bir baz halkasına (veya alana) göre asal olduğuna dikkat edin . Özellikle, eğer alan karmaşık sayılarsa, o zaman 2'den büyük hiçbir polinom asal değildir. Bu yüzden Rational (muhtemelen en basit) Tamsayı (bu da bazı tamsayı faktörlerini içerecektir) ya da bazı m sayısını modulo isteyip istemediğinizi belirtirim. M asal ise, o zaman oldukça kolay algoritmalar vardır. Aksi halde işler biraz daha zorlaşır ... (ama uygulanabilir)
cody

Yanıtlar:


3

Mathematica, 224 bayt

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

Açıklama :

Burada Kronecker metodu kullanılmıştır. Bu yöntem bazı düşük dereceli polinomlar üretir ve orijinal polinomun bir faktörü olup olmadığını test eder.

Test durumları :

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} *)

Bu benim dizüstü bilgisayarımda bu 14 yıl sürüyor, 3x^9-8x^8-3x^7+2x^3-10bunun asal olduğuna karar vermek .


1

PARI / GP, 16 bayt, cehennem kadar ucuz

Bazı nedenlerden dolayı, bu izin verilmez (komutun faktör veya denklem çözmediğine dikkat çekerek):

polisirreducible

Test durumu

%(x^2+x+1)

döner 1(doğru). Diğer örnekler benzer şekilde çalışır.

Ancak bunun zor yoldan çözülebilir olduğunu göstermek için işte tam bir çözüm.

Daha az ucuz, ama sloooooooooow

Bunu golf ile atmanın hiçbir anlamı yok.

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
}

Düzenleme: Yorum yapanlar, ilk yöntemin iyi bir zevk, kuralların ruhu, Cenevre Sözleşmesi, standart boşluk yönetimi kuralları vb. ilk ve kesinlikle kabul edilebilir görünüyor.


1
Hmmmm ... Ben eminim bu komut o değilim yapar kaputunun altında faktörü ve / veya çözmek denklemleri. (Ayrıca, bir meydan okuma bazı yerleşiklere izin vermez ise, bir şekilde sorunu çözen bir yerleşikin aynı zamanda mücadelenin ruhunda olmadığı anlamına da gelir.)
Martin Ender

@ MartinBüttner: İlk cevabın mektuba uyduğunu ama mücadelenin kurallarının ruhuna uymadığını düşünüyorum. Bu yüzden meşru bir çözüm olan ikinci sürümü yazdım. x^4+1(Asal olarak indirgenebilir moddur) 86 milisaniyede indirgenemez olduğunu kontrol edebilir . Başka hiçbir şey yoksa, başkaları bu sürüme adapte edip golf oynayamaz.
Charles

1
İlk cevap, varsayılan olarak yasaklanan bir boşluk içine düşüyor: İşi yapmak için yerleşik işlevleri kullanma . Lütfen cevabınızı kaldırın veya en azından geçerli bir çözüm olmadığını belirtin.
isaacg

5
@isaacg Bu şu anda geçerli bir standart boşluk değil (oy kullanma yetkisi + 44 / -29 nedeniyle). Charles, sadece ikinci cevabın gerçekten meşru olduğuna katılıyorsan, onun yerine bayt sayısını da eklemelisin .
Martin Ender,

@ MartinBüttner: Bilmiyorum - sanırım her ikisi de bu sorunun kuralları ve genel boşluklar ile meşru. Ancak sorunu belirtmek için bir yorum ekledim.
Charles
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.