10.24T3 解方程 取模意义下运算+秦九韶算法
生活随笔
收集整理的這篇文章主要介紹了
10.24T3 解方程 取模意义下运算+秦九韶算法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
#1228 解方程
?
描述
已知多項式方程:
a0+a1x+a2x^2+..+anx^n=0
求這個方程在[1, m ] 內的整數解(n 和m 均為正整數)
輸入
輸入共n + 2 行。
第一行包含2 個整數n 、m ,每兩個整數之間用一個空格隔開。
接下來的n+1 行每行包含一個整數,依次為a0,a1,a2..an
輸出
第一行輸出方程在[1, m ] 內的整數解的個數。
接下來每行一個整數,按照從小到大的順序依次輸出方程在[1, m ] 內的一個整數解。
樣例輸入[復制]
輸入樣例#1:2 10?
1
-2
1
輸入樣例#2:
2 10
2
-3
1
輸入樣例#3:
2 10?
1?
3?
2?
樣例輸出[復制]
輸出樣例#1:1
1
輸出樣例#2:
2
1
2
輸出樣例#3:
0
提示
對于30%的數據:0<n<=2,|ai|<=100,an!=0,m<100
對于50%的數據:0<n<=100,|ai|<=10^100,an!=0,m<100
對于70%的數據:0<n<=100,|ai|<=10^10000,an!=0,m<10000
對于100%的數據:0<n<=100,|ai|<=10^10000,an!=0,m<1000000
?
?
?
?
由于在取模意義下解的結果是不會變化的,所以我們就可以隨便選兩個質數來保證解的唯一性
如果我們找到了一個非解,那么根據同余的性質它加上模數的倍數肯定也不是解
所以我們就可以直接做下來了
code:
1 #include<iostream> 2 #include<algorithm> 3 #include<cstdio> 4 using namespace std; 5 const long long mod1=117431; 6 const long long mod2=102437; 7 string a[1000]; 8 long long n,m,c[1005],b[100005],vis[2000005]; 9 long long QJS(long long x,int mod) { 10 long long temp=b[1]; 11 for(long long i=1; i<=n; i++) { 12 temp=(temp*x+b[i+1])%mod; 13 } 14 // if(x==1)cout<<"temp="<<temp<<"\n"; 15 return temp; 16 } 17 long long QJS2(long long x,int mod) { 18 long long temp=c[1]; 19 for(long long i=1; i<=n; i++) { 20 temp=(temp*x+c[i+1])%mod; 21 } 22 // if(x==1)cout<<"TEMP="<<temp<<"\n"; 23 return temp; 24 } 25 long long Ans[1000005]; 26 int pre1(string k) { 27 int x=0,f=1,st=0; 28 if(k[0]=='-')f=-1,st=1; 29 for(int i=st; i<k.size(); i++) { 30 x=(x<<3)+(x<<1)+k[i]-'0'; 31 x%=mod1; 32 } 33 return x*f; 34 } 35 int pre2(string k) { 36 int x=0,f=1,st=0; 37 if(k[0]=='-')f=-1,st=1; 38 for(int i=st; i<k.size(); i++) { 39 x=(x<<3)+(x<<1)+k[i]-'0'; 40 x%=mod2; 41 } 42 return x*f; 43 } 44 int main() { 45 // freopen("equation8.in","r",stdin); 46 cin>>n>>m; 47 for(long long i=1; i<=n+1; i++) { 48 cin>>a[n+2-i]; 49 } 50 for(int i=1; i<=n+1; i++) { 51 b[i]=pre1(a[i]); 52 c[i]=pre2(a[i]); 53 } 54 long long ans=0; 55 int p[3]; 56 p[1]=mod1,p[2]=mod2; 57 for(int i=1; i<=2; i++) { 58 for(int x=0; x<p[i]; x++) { 59 if(i==1) { 60 if(QJS(x,p[i])==0) { 61 for(int j=x; j<=m; j+=p[i]) { 62 if((++vis[j])==2) { 63 Ans[++ans]=j; 64 } 65 } 66 } 67 } else { 68 if(QJS2(x,p[i])==0) { 69 for(int j=x; j<=m; j+=p[i]) { 70 if((++vis[j])==2) { 71 Ans[++ans]=j; 72 } 73 } 74 } 75 } 76 } 77 } 78 sort(Ans+1,Ans+ans+1); 79 cout<<ans<<'\n'; 80 for(long long i=1; i<=ans; i++) { 81 cout<<Ans[i]<<'\n'; 82 } 83 return 0; 84 }over
轉載于:https://www.cnblogs.com/saionjisekai/p/9847641.html
總結
以上是生活随笔為你收集整理的10.24T3 解方程 取模意义下运算+秦九韶算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 面向对象编程基础 (一)
- 下一篇: 互联网分布式架构--演进过程