poj 1060 多項式題目)

2021-09-22 12:40:23 字數 1662 閱讀 6456

題意:多項式的運算的題目,不過這個運算有個特點,就是只要是同項的多項式,無論相加還是相減,都為0,給你三個多項式,分別為a,b,c。要你求(a*b)%c。

思路:首先吧a*b算出來,然後,求某個項數乘以c會等於a*b的,然後把a*b的最大的冪降到c以下,求出來的就是答案。

以下為題目中多項式運算所定的規則:

定義兩個多項式的加法和減法為當同冪級的項出現兩次或不出現時,該冪級前邊的係數為0,否則為1;

兩個多項式的乘法和普通的多項式乘法一樣展開,然後按照加法或減法規則合併;

兩個多項式的除法為對這兩個多項式相除取餘。

題目**:

第一種方法:

#include #include #include #define me(x) memset(x,0,sizeof(x))

int a[2009],b[2009],c[2009],d[2009];

int main()

}len_d=len_a+len_b; //d是a*b的答案。dde也就是說這個答案的最高次冪是多少。

while(len_d>=len_c) //把d的最高次冪比c小。

for(int i=len_d;i>=0;i--) //找d的最高次冪。

if(d[i])

}printf("%d",len_d+1);

for(int i=len_d;i>=0;i--)

printf(" %d",d[i]);

printf("\n");

}return 0;

}

第二種方法:

#include #include using namespace std;  

const int maxn=2010;

int f[maxn],g[maxn],h[maxn],sum[maxn];

int lf,lg,lh,ls;//分別為f,g,h,sum的最高次冪

//比較sum表示的多項式與h表示的多項式的大小

int compare()

//將g多項式的資訊存入g陣列

scanf("%d",&lg);

lg--;

for(int j=lg; j>=0; j--)

//將h多項式的資訊存入h陣列

scanf("%d",&lh);

lh--;

for(int j=lh; j>=0; j--)

//計算f*g的多項式

ls=lf+lg;

for(int i=lf; i>=0; i--)

} //求餘就是多項式相減到小於除數

while(compare()>=0)

while(ls&&(sum[ls]==0))

ls--;

} printf("%d",ls+1);

for(int i=ls; i>=0; i--)

printf("\n");

} return 0;

}

POJ 多項式加法(AC)

在失敗了50次之後,終於在光棍節這一天ac了!因為這還錯過了聯誼會,想想還真是diao絲啊 其實這個題做出來之後想想還真不算是難題,之前想複雜了。資料結構與演算法分析 c語言描述 3.2 節 the list adt 就是以多項式加法為例子講解的list的應用。我最開始寫的答案思路是 將每一組的兩個...

MATLAB多項式及多項式擬合

多項式均表示為陣列形式,陣列元素為多項式降冪係數 1.polyval函式 求多項式在某一點或某幾個點的值.p 1,1,1 x 2 x 1 x 1,0,1 y polyval p,x 另外求函式在某一點或某幾個點的值可以用函式feval.x 1,0,1 y feval x exp x x 注意用的乘法...

數學 多項式 多項式求逆

多項式求逆 前置知識 ntt 給定乙個多項式 f left x right 求乙個多項式 g left x right 使得 f left x right g left x right equiv 1 left bmod 998244353 right 考慮遞迴求解。假定現在已經求出了 g 0 le...