Bir polinomu sonlu bir alan üzerinde veya tamsayılar üzerinde etkileyen faktörler


20

Herhangi bir yerleşik faktoring / polinom fonksiyonu kullanmadan, bir polinomu tamsayılar veya sonlu bir alan üzerinde indirgenemez hale getirin.

Giriş

Program / fonksiyonunuz ngirdi olarak bir miktar asal (veya sıfır) sayı alacaktır . Alan / halka bu sırayla (yani sonlu alanı Z/nZ), ya da sadece Z, eğer nbir 0. Değilse veya asalsa n, programınız başarısız olabilir 0. Polinom içeride olacak F[x].

Programınız / fonksiyonunuz da polinomu girdi olarak alır.

Girişte bir miktar esneklik var, girişi nasıl almak istediğinizi belirttiğinizden emin olun. Örneğin, polinom katsayıların bir listesi olarak veya çoğu insanın beklediği biçimde (ör .:) 50x^3 + x^2veya başka bir makul biçimde girilebilir . Veya alanı / zili girme biçimi de farklı olabilir.

Çıktı

Programınız / fonksiyonunuz polinom faktörlü olarak çıktı verecektir. Birden fazla kökü genişletilmiş olarak bırakabilirsiniz (yani (x + 1)(x + 1)yerine (x + 1)^2). İkili işleçler arasındaki boşlukları kaldırabilirsiniz. Yan yana ile değiştirebilirsiniz *. Garip yerlere boşluk ekleyebilirsiniz. Faktörleri istediğiniz sıraya göre yeniden sıralayabilirsiniz. xTerim sadece olabilir (x). xolarak yazılabilir x^1; Ancak sabit terim olmayabilir var x^0. Yabancı +işaretlere izin verilir. Sen olmayabilir bir bir terim var 0önünde, onlar gerekir dışarı bırakılabilir. Her faktörün başterim gerekir pozitif, negatif belirtiler dışında olmalıdır.

Test senaryoları, programınızın bunlardan her biri için makul sürede çıktı üretebilmesi gerekir (örneğin, <= 2 saat):

Giriş: 2, x^3 + x^2 + x + 1

Çıktı: (x + 1)^3

Giriş: 0, x^3 + x^2 + x + 1

Çıktı: (x + 1)(x^2 + 1)

Giriş: 0, 6x^4 – 11x^3 + 8x^2 – 33x – 30

Çıktı: (3x + 2)(2x - 5)(x^2 + 3)

Giriş: 5, x^4 + 4x^3 + 4x^2 + x

Çıktı: x(x + 4)(x + 4)(x + 1)

Giriş: 0, x^5 + 5x^3 + x^2 + 4x + 1

Çıktı: (x^3 + 4x + 1)(x^2 + 1)

Test davalarımı eleştirdiği için Peter Taylor'a özel teşekkürler


1
Ben düşünüyorum bu bazılarına bana bir flashback veriyor sert lisans matematikte . Burada doğru yöne mi gidiyorum?
Dijital Travma

1
Bu bana, polinomları doğru bir şekilde yazdırmaya çalışan kabuslar geçirdiğim zamanı hatırlatıyor ...
Sp3000

Üzgünüm anlamadım, ama ilk giriş numarası ne yapmalı? veya çıktıyı nasıl etkiler?
Doktor

@Optimizer İlk giriş numarası, üzerinde çalıştığınız alan / tam sayıları belirler. Sayı sıfır değilse, bu siparişin sonlu alanı üzerinde çalışıyorsunuz demektir. Sonlu bir düzen alanı pelementlere sahiptir {0, 1, ... , p-1}ve toplama / çarpma modu altındadır p. Temel olarak, herhangi bir katsayıyı mod pile azaltın ve iyisiniz. Ayrıca, eğer bir köke, yani doğrusal faktöre sahipse , polinom içine takıldığında bunlardan birinin (mod ) {0, ... , p-1}üreteceğini unutmayın . 0p
Justin

1
@flawr, faktoring üzerinde standart yaklaşım uygun ve sonra Hensel artışı için faktoring Zetmektir . Bununla birlikte, golf edilebilir yaklaşım muhtemelen (ve bu kesinlikle baktığım yoldur) faktörlerin yüksekliği ve kaba kuvvet üzerinde basit bir sınır kullanmaktır. Z/pZp
Peter Taylor

Yanıtlar:


17

GolfScript (222 bayt)

~.@:q@.0\{abs+}/2@,2/)?*or:^{\1$^base{^q- 2/-}%.0=1=1$0=q>+{{:D[1$.,2$,-)0:e;{.0=0D=%e|:e;(D(@\/:x@@[{x*~)}%\]zip{{+}*q!!{q%}*}%}*e+])0-{;0}{@;@\D.}if}do}*;\).^3$,)2/?<}do;][[1]]-{'('\.,:x;{.`'+'\+'x^'x(:x+x!!*+\!!*}%')'}/

Çevrimiçi demo

notlar

  1. Girdi biçimini, nen önemlisi en önemlisi olan bir GolfScript katsayı dizisi izler. Örn . 0, x^5 + 5x^3 + x^2 + 4x + 1Olarak biçimlendirilmelidir 0 [1 0 5 1 4 1].
  2. Sonlu bir alanda, konuyla ilgili olacak kadar az derecede çok sayıda çok sayıda polinom vardır. Ancak, durum böyle değil Z. ZMignotte'nin yüksekliğine bağlı rahat bir form kullanarak idare ediyorum . Faktoringde yükseklik sınırları hakkında büyük bir makale Z [x] 'de Faktörler Üzerinde Sınırlar , John Abbott, 2009 (bağlantı arxiv ön baskısıdır; Özgeçmişi bunun Sembolik Hesaplama Dergisi tarafından kabul edildiğini söylüyor ). Burada verilen en rahat form L-2 normu açısındandır, ancak bayttan tasarruf etmek için daha fazla rahatladım ve bunun yerine L-1 normunu kullanıyorum. Sonra deneme bölümü tarafından kaba zorlama olayı.
  3. Sonlu bir alanda, her polinom sabit bir kez monik bir polinomdur, bu yüzden sadece monik polinomlar tarafından deneme bölümü yaparım ve sahada karşılıklı bir tasarruf sağlarım. Bununla birlikte, Zsadece bir halkadır ve bu nedenle monik olmayan aday faktörlerle deneme bölünmesi yapmak gerekir. Öncü bir faktör bölme testi yaparak ve bir "hata" bayrağı biriktirerek rasyonel sayıları uygulamadan kurtulmayı başarıyorum e.
  4. Her iki nokta 2 ve 3, çarpanlara ayırma durumunun Zgenellikle daha yavaş olduğunu ve çevrimiçi demo ile test edilemediğini ima eder . Bununla birlikte, resmi test davalarının en yavaşı 10 dakika sürmektedir ve bu da “makul” zaman sınırı dahilindedir.
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.