Bu bir polinom faktörü mü?


11

Bir polinom bir faktör bölünemeyen (x-n)eğer f(n)=0bir işlev için f. İşiniz: bir polinom fonksiyonunun f(x)bölünebilir olup olmadığını belirlemek (x-n).

Girdi

Girdi şeklinde (x-n), (Polynomial). Unutmayın, n negatif (x-n)ise, girdi biçiminde olacaktır(x+n) . Polinom için, tüm üsler olarak konacaktır ^. Değişkenlerin yanına katsayılar yazılacaktır x. Örnek bir polinom olabilir 2x^2 + x^1. Hiçbir şey arasında boşluk kalmayacak. Terim xolarak girilecektir x^1. "Normalde" bak böyle ne Yani (x - 1)olacaktır (x^1-1). Katsayılar ve güçler her zaman tamsayı olacaktır . Sadece katsayısı örtük olacaktır x. Yani, xolarak yorumlanabilir1x

Çıktı

Boole değeri. Gerçek ya da Falsey.

@AlexA sayesinde. Bunu netleştirmeme yardım ettiğin için!

Örnekler

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

kurallar

  • Bu , yani bayttaki en kısa kod kazanıyor

Maalesef snippet liderlik tablosunun nasıl uygulanacağını bilmiyorum. Nasıl yapılacağını bilen biri varsa, yayını düzenlemekten çekinmeyin.


Girdi tam olarak bu forma sahip bir dize mi olacak, yani bölen adayın etrafındaki parens, sıfır veya bir boşluklu bir virgül ve polinom etrafındaki parenler?
Alex A.


Kesinlikle bunun bir kopyası değil.
intboolstring

@intrepidcoder Bu bir kopya değil çünkü soru bir polinomu hesaba katmıyor. Bir polinomun doğrusal bir faktöre bölünüp bölünemeyeceğini görmek içindir.
intboolstring

Polinom katsayıları her zaman tamsayı olacak mı?
Dijital Travma

Yanıtlar:


5

Pyth - 39 bayt

Bu, normal ifade ve evalün korkunç bir birleşimidir. Yaklaşımı seviyorum, ancak uygulamayı geliştirmeye çalışacağım.

Polinom Kalan Teoremini kullanır .

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

Eval kullanımı nedeniyle çevrimiçi çalışmıyor.


3

Casio Basic, 19 bayt

judge(mod(b,a)=0

Anlaşıldığı üzere, fx-CP400 modcebirsel ifadeler üzerinde yapabilir !

Polinom ve faktör ifadeler olarak girilmelidir. Kod için 16 bayt a,b, parametre değeri kutusuna 3 bayt girmek .


1

MATLAB, 103 99 97 95 93 bayt

Bazı farklı şeyler deniyorum ve bunu birkaç bayt kurtarmak için işe aldım:

eval([regexprep(input(''),{'.+?1(.+)\),','(\d)x'},{'x=str2num(''$1'');disp(~','$1\*x'}) 41]);

Bunu daha da azaltabilirsem, bir açıklama göndereceğim.


Eski kod açıklama

t=sscanf(input(''),'(x^1%d),%s')';x=-t(1);disp(~eval(regexprep([t(2:end) ''],'(\d)x','$1\*x')))

Bu Octave ile de çalışır . Şunları yapabilirsiniz çevrimiçi denemek . Programı adlandırılmış bir komut dosyası olarak kaydettiğim için komut istemine isFactor.mgirebilirsiniz isFactor. [Not: Octave'de çalışırken bir uyarı verir - MATLAB bunu üretmez].

Giriş '(x^1+7),(x^2-49)', soruya uygun biçimde olmalıdır . Tırnak işaretleri eklenir, böylece MATLAB / Octave bir dize olduğunu bilir.

Çıktı, doğru veya yanlış olup olmamasına bağlı olarak a 0veya a şeklindedir 1.


Yani, kod aşağıdaki gibi çalışır. İlk önce bir giriş isteriz ve sonra ayrıştırırız. Ayrıştırma dizesi, dizedeki ilkinden sonra imzalı sayıyı ayıklar (x^1- bu bizim değerimiz n. Sonra girdi içinde %ssonra string ( ) ayıklamaya devam ),- bu bizim ifade.

t=sscanf(input(''),'(x^1%d),%s')';

Sonra, değeri ayıklamak nve seti xkendisine eşit - biz ifadesi sıfıra eşit olup olmadığını değerlendirmek üzere olunca n==x, biz x değeri saklamak bu yüzden bu yüzden. Ayrıştırma sırasında eksi işareti nedeniyle ayıklanan sayıyı da reddediyoruz.

x=-t(1);

Daha sonra bir boole olan çıktıyı göstereceğiz

disp(

Çıktı temel olarak değerlendirilen denklemimizin mantıksal olumsuzlamasıdır. Eğer f(x)sıfır olduğu, bu, 1 dönecektir aksi takdirde sıfır ile sonuçlanacaktır.

     ~eval(

Girdi ifadesini değerlendiriyoruz, ancak bunu yapmak için MATLAB'ın anlayabilmesi için bunu biraz yeniden biçimlendirmemiz gerekiyor. Dizeyi okuduğumuzda, aslında bir tür dizisidir double, bu yüzden bunu bir karakter dizisine dönüştürmemiz gerekir. Dönüşümden önce, ilk elementten de kurtulduk, çünkü kullandığımız şey bu n. Daha sonra, herhangi bir tekrarından xönce 4xaynı şeyle bir sayı (örn. ) *İle girilen ancak MATLAB'ın hesaplayabilmesi için çarpma ( ) işareti ile değiştirmemiz gerekir.

           regexprep(char([t(2:end) ''],'(\d)x','$1\*x')
     )
)

1

VBScript, 118 116 bayt

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

Girişin ilk kısmının doğrusal bir polinom olduğunu bildiğimiz için, sadece kökünün ikinci polinomunki ile eşleşip eşleşmediğini kontrol etmemiz gerekir; ve terimi terimini gerektiği gibi evalekleyerek hazırlamalıyız *.


1

Aksiyomu 77 180 bayt

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)

önceki çözüm

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

yanlıştı çünkü derece (b)> = derece (a) yazdığım bir hata ... test ve sonuçlar

(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
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.