題目傳送門
題目描述
已知多項式方程:
\[a0+a1*x+a2*x^2+\dots+an*x^n=0
\]求這個方程在 \([1,m]\) 內的整數解(\(n\) 和 \(m\) 均為正整數)。
輸入格式
輸入共 \(n + 2\) 行。
第一行包含 \(2\) 個整數 \(n, m\),每兩個整數之間用乙個空格隔開。
接下來的 n+1n+1 行每行包含乙個整數,依次為 \(a0,a1,a2\dots an\) 。
輸出格式
第一行輸出方程在 \([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]\) 之間的整數,帶入多項式, \(\theta(n)\) 求出多項式的值,如果與 \(0\) 相等就算乙個整數解。演算法複雜度 \(\theta(nm)\) 。
但是我們看: \(|a_i|\le10^\) 顯然不能直接算,我們只需要模乙個大質數就可以了,但是不能有數被整除,這樣就不會爆int了,經過檢驗,\(222222227\) (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;
int check(int x)
if(ans%mod==0) return 1;
return 0;
}int main()
printf("%d\n",cnt);
for(int i=1;i<=cnt;i++)
printf("%d\n",ans[i]);
return 0;
}
NOIP2014 解方程 題解
題目傳送門 題目描述 已知多項式方程 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 ...
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是就可...