題目描述
已知多項式方程:
a0+a1x+a2x^2+..+anx^n=0
求這個方程在[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
-2輸出樣例#1:
輸入樣例#2:
2 10
-3輸出樣例#2:
輸入樣例#3:
2 10
輸出樣例#3:
說明30%:0
50%:0
70%:0
100%:0
分析:一看想是用高精度做,可能還會超時,就沒仔細做,打的暴力列舉,50分
正解:其實不是高精度……
對於很大的數,我們可以給它取模,因為等式兩邊取模仍然成立。但是列舉x來判斷的話會超時,所以這裡用到乙個技巧:如果乙個數x對於這個等式成立的話,那麼x+mod(模的那個數)也會成立。
需要注意的是,只用乙個數模可能會不對,所以多用幾個檢驗一下。
**:#include#include#include
#define m 110
#define n 1000010
#define ll long long
using namespacestd;chars[n];intn,m;
ll a[3][m],p[3]=;boolok[n];bool check(int x,intnum)
ll ans=0,w=1;for(int i=0;i<=n;i++)
ans=(ans+a[num][i]*w%p[num])%p[num];
w=(w*x)%p[num];
}if(!(ans%p[num]))return true;return false;
}intmain()
freopen("jh.in","r",stdin);
scanf("%d%d",&n,&m);for(int i=0;i<=n;i++)
scanf("%s",s);int l=strlen(s);bool flag=false;for(int j=1;j<=2;j++)
for(int k=x;k
a[j][i]=(a[j][i]*10%p[j]+(ll)s[k]-'0')%p[j];if(flag)a[j][i]=p[j]-a[j][i];
}for(int i=1;i<=p[1];i++)if(check(i,1))
int tot=0;for(int i=1;i<=m;i++)if(ok[i])tot++;
printf("%d\n",tot);for(int i=1;i<=m;i++)if(ok[i])printf("%d\n",i);return 0;
view code
解方程命令
求極限 limit 例 limit f,x,a,left 對表示式f求極限,變數為x,從左邊趨近a。inf 正無窮 inf 負無窮。求解線形方程 solve,linsolve 例 a 5 0 4 2 1 1 2 1 4 1 2 0 1 1 1 1 矩陣的行之間用分號隔開,元素之間用逗號或空格 b 3...
基本解方程
ncl是一家專門從事計算器改良與公升級的實驗室,最近該實驗室收到了某公司所委託的乙個任務 需要在該公司某型號的計算器上加上解一元一次方程的功能。實驗室將這個任務交給了乙個剛進入的新手zl先生。為了很好的完成這個任務,zl先生首先研究了一些一元一次方程的例項 4 3x 8 6a 5 1 2 2a 5 ...
數學 解方程
簡而言之,本題任務就是解方程。共有兩個子任務。作為小學生,我們只會解一元一次方程,一元一次方程最終都可以化為 ax n 的形式。現在問 對於給定的 n 要使得 x 有正整數解,總共可以取多少個不同的 a 呢?作為中學生,我們只會解二元一次不定方程,二元一次不定方程最終都可以化為 ax by n 的形...