秦九韶 強枚 NOIP2014day2 解方程

2022-09-18 01:09:14 字數 1831 閱讀 7211

題目描述

已知多項式方程:

a0+a1x+a2x^2+..+anx^n=0

求這個方程在[1, m ] 內的整數解(n 和m 均為正整數)

輸入輸出格式

輸入共n + 2 行。

第一行包含2 個整數n 、m ,每兩個整數之間用乙個空格隔開。

接下來的n+1 行每行包含乙個整數,依次為a0,a1,a2..an

輸出格式:

第一行輸出方程在[1, m ] 內的整數解的個數。

接下來每行乙個整數,按照從小到大的順序依次輸出方程在[1, m ] 內的乙個整數解。

輸入輸出樣例

輸入樣例#1:

2 10

1 -2

1 輸出樣例#1:

1 1

輸入樣例#2:

2 10

2 -3

1 輸出樣例#2:

2 1

2 輸入樣例#3:

2 10

1 3

2 輸出樣例#3:

0 說明

對於30%的資料:0< n<=2,|ai|<=100,an!=0,m<100

對於50%的資料:0< n<=100,|ai|<=10^100,an!=0,m<100

對於70%的資料:0< n<=100,|ai|<=10^10000,an!=0,m<10000

對於100%的資料:0< n<=100,|ai|<=10^10000,an!=0,m<1000000

我們將公式化簡可得

a0+a1x+a2x^2+..+anx^n

=a0+x(a1+a2x+a3x^3..+anx^(n-1))

=a0+x(a1+x(a2+a3x..+anx^(n-2))

=......

=a0+x(a1+x(a2+x(a3+x(a4.....))

由上的秦九韶公式求得,我們可以在列舉乙個點後o(n)判斷是否為0

那麼反過來看m的範圍m<=1000000,n<=100

咦!又露出了那意味聲稱的邪笑!

然後,這就是題水題了

我們強枚可能的m,用o(n)判斷是否為0

(tips:

由於ai<=10^10000,所以我們必須模乙個大質數

最好多模幾個,以免出現剛好為質數的倍數的點

不過我乙個10^9+7就夠了

#include

#include

#include

#include

#include

#include

const

int mo=1000000007;

using

namespace

std;

long

long a[110],n,m,ans[1000100],cnt;

long

long read()

while (c>='0'&&c<='9') sum=sum*10+c-'0',sum%=mo,c=getchar();

return sum*zf;

}long

long f(long

long h)

return sum;

}int main()

noip 解方程 秦九韶演算法

已知多項式方程 a0 a1x 1 a2 x2 an 1xn 1 an xn 0 求這個方程在 1,m 內的整數解 n 和 m 均為正整數 輸入共 n 2 行。第一行包含 2 個整數 n m,每兩個整數之間用乙個空格隔開。接下來的 n 1 行每行包含乙個整數,依次為a0 a1,a2,a n 第一行輸出...

秦九韶演算法實現

設定多項式的係數,為1.0 10.0之間的隨機數 param num return public arraylistgetrandomcoefficient integer num return arraylist 秦九韶演算法計算結果 param arraylist param x return ...

秦九韶演算法C語言

最近在學數值分析,需要進行演算法編碼,小小的記錄一下自己的實驗!關於秦九韶演算法求解多項式,開始之前看了很多同學的分享,基本採用的都是陣列儲存係數再進行迴圈。但是直接用c語言陣列靜態儲存感覺不太方便,必須提前約定陣列規模,無法隨著輸入數的改變而變動。所以這裡就換成了動態記憶體分配的方法qwq,採用m...