已知多項式方程:
$a_0+a_1x+a_2x^2+..+a_nx^n=0$//用latex好看多了
求這個方程在[1, m ] 內的整數解(n 和m 均為正整數)
輸入格式:
輸入檔名為equation .in。
輸入共n + 2 行。
第一行包含2 個整數n 、m ,每兩個整數之間用乙個空格隔開。
接下來的n+1 行每行包含乙個整數,依次為a0,a1,a2..an
輸出格式:
輸出檔名為equation .out 。
第一行輸出方程在[1, m ] 內的整數解的個數。
接下來每行乙個整數,按照從小到大的順序依次輸出方程在[1, m ] 內的乙個整數解。
輸入樣例#1:
2 10 1-21
輸出樣例#1:
11
輸入樣例#2:
2 102-31
輸出樣例#2:
212
輸入樣例#3:
2 101 3
2
輸出樣例#3:
0
30%:$050%:$070%:$0100%:$0列舉有點bsgs的思想,驗證有點雜湊的味道。
首先可以想到列舉x,看看$f(x)%p$(p要取多個)是否都等於0,如果對於所有p膜
模得的數都是0,那麼x就是乙個解了。選哪些質數來膜
模?考驗人品……
那麼從1到$p_0-1$列舉x,如果$f(x)%p!=0$,那麼$f(x+p_0)%p_0!=0$,這樣就能去掉許多無用的數,對於$f(x)%p_0==0$的x,再驗證$f(x)%p_1$是否為零,如果依然為零(不放心可以多模幾個,我只模了2個),那x多半就是了,然後依次驗證$x+p_0$、$x+2*p_0$、$x+3*p_0$……直到m。
計算$f(x)$要用秦九韶演算法(或者叫做霍納法則……)
#include#includechar s[100010]=;
intn,m;
int prime=;
long
long a[105][5]=;
bool is_result[1000010]=;
void quyu(int k)//
k為次數
}bool judge(int x,int p)//
x取值和質數下標
return fx==0;}
intmain()
for(int i=1;i<=prime[0];i++)
}int num=0
;
for(int i=1;i<=m;i++)
if(is_result[i]) num++;
printf(
"%d\n
",num);
for(int i=1;i<=m;i++) if(is_result[i]) printf("
%d\n
",i);
return0;
}
ac了這題我noip2014就500+分了(*^__^*) 嘻嘻……
洛谷p2312 解方程
清明培訓qwq,明天就要回學校了qwq拒絕 行吧我洛谷都四天沒碰了 解方程 傳送門 演算法標籤 作為乙個提高 省選 的題 丁大佬真的很有幽默感emmm include const long long mod int 1e9 7 const int maxn 100 5 const int maxm ...
洛谷P2312 解方程題解
已知多項式方程 a 0 a 1x a 2x 2 cdots a nx n 0 求這個方程在 1,m 內的整數解 n 和 m 均為正整數 輸入共 n 2 行。第一行包含 2 個整數 n,m 每兩個整數之間用乙個空格隔開。接下來的 n 1 行每行包含乙個整數,依次為 a 0,a 1,a 2 ldots ...
洛谷P2312 解方程 (Hash 數學)
題目傳送門 題目分析 一道腦洞很大的題 這要是在考場上我絕對暴力高精度水50走人。要判斷乙個很算式的結果是不是0,而且算式中的數字都很大,我們可以將算式中的數字模幾個大質數,看算出來的結果是否都為0。於是這題我們將每個係數模幾個大質數,再暴力將 1,m 中的數代入檢驗,就有70分了。至於100分 要...