洛谷 P2312 解方程

2022-06-02 00:00:18 字數 1628 閱讀 4890

已知多項式方程:

$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-2

1

輸出樣例#1:

1

1

輸入樣例#2:

2 102-3

1

輸出樣例#2:

2

12

輸入樣例#3:

2 10 

1 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#include

char 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分 要...