題意:多項式的運算的題目,不過這個運算有個特點,就是只要是同項的多項式,無論相加還是相減,都為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...