NOIP2014 解方程 題解

2021-10-24 12:46:00 字數 2390 閱讀 5875

題目傳送門

題目描述

已知多項式方程:

a 0+

a1∗x

+a2∗

x2+⋯

+an∗

xn=0

a0+a1*x+a2*x^2+\dots+an*x^n=0

a0+a1∗

x+a2

∗x2+

⋯+an

∗xn=

0求這個方程在 [1,

m][1,m]

[1,m

] 內的整數解(n

nn 和 m

mm 均為正整數)。

輸入格式

輸入共 n+2

n + 2

n+2 行。

第一行包含 2

22 個整數 n,m

n, m

n,m,每兩個整數之間用乙個空格隔開。

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

a1,a

2…an

a0,a1,a2\dots an

a0,a1,

a2…a

n 。輸出格式

第一行輸出方程在 [1,

m][1,m]

[1,m

] 內的整數解的個數。

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

m][1,m]

[1,m

] 內的乙個整數解。

輸入輸出樣例

輸入 #1

2 10 1-2

1

輸出 #1

1

1

輸入 #2

2 102-3

1

輸出 #2

2

12

輸入 #3

2 1013

2

輸出 #3

0
說明/提示

題目解析

秦九韶演算法結論:對於乙個n次多項式,至多做n次乘法和n次加法。

不會秦九韶演算法?點這裡

不難發現,我們只要列舉區間 [1,

m][1,m]

[1,m

] 之間的整數,帶入多項式, θ(n

)\theta(n)

θ(n)

求出多項式的值,如果與 0

00 相等就算乙個整數解。演算法複雜度 θ(n

m)\theta(nm)

θ(nm) 。

但是我們看: ∣ai

∣≤10

10000

|a_i|\le10^

∣ai​∣≤

1010

000 顯然不能直接算,我們只需要模乙個大質數就可以了,但是不能有數被整除,這樣就不會爆int了,經過檢驗,222222227

222222227

222222

227 (8個2,1個7)就是乙個很好的大質數。

**:

#include

#define maxn 1039

#define mod 222222227

//8217

using

namespace std;

typedef

long

long ll;

typedef

long

long type;

inline type read()

if(flag)

return

-sum;

return sum;

}int n,m;

ll a[maxn]

,ans[maxn]

;int cnt;

intcheck

(int x)

if(ans%mod==0)

return1;

return0;

}int

main()

printf

("%d\n"

,cnt)

;for

(int i=

1;i<=cnt;i++

)printf

("%d\n"

,ans[i]);

return0;

}

NOIP2014 解方程 題解

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

NOIP2014 解方程 數學)

本題重點考察數學知識,可分成以下三點 秦九韶演算法 取模運算律,long long等資料型別的細節。秦九韶演算法 假設有一元4次方程a0 a1 x a2 x2 a3x3 a4x4 0,那麼其等於 x x xa4 a3 a2 a1 a0 0。在此題中同理,最後算出答案判斷是否為0。取模運算律 資料型別...

NOIP2014 解方程 數論 模擬

題目大意 求乙個多項式方程在 1,m 1,m 1,m 的整數解。題解 沒想到吧,這題竟然是暴力 溜 好吧也沒有那麼簡單 要用到乙個演算法 秦九韶演算法,就是減少多項式的計算次數 然後暴力列舉 1,m 1,m 1,m 就行了 不行,由於係數太大,我們還要取模。將原數分別模多個質數,如果答案都為0是就可...