Expand Euclid.
Enumeration A, which is available according to X1,X3 and recursion.
(a+1) *b-k*mod=f[3]-a*a*b.
By expanding Euclid to find out B.
The calculation is carried out in the original type.
#include <cstdio>#include<algorithm>#include<cstring>using namespacestd;Const intMAXN =20000+Ten;Const intMoD =10001; typedefLong LongLL; LL F[MAXN]; LL n,a,b;BOOLOK; ll EXGCD (ll A,ll b,ll&x,ll &y) {if(b==0) {x=1; y=0; returnA; } LL D=EXGCD (b,a%b,y,x); Y-= (A/b) *x; returnD;}intMain () {scanf ("%lld",&N); for(intI=1; i<=n*2; i+=2) scanf ("%d",&F[i]); for(a=0; a<=10000; a++) {OK=1; LL T=f[3]-a*a*f[1],x,y; LL D= EXGCD (mod,a+1, x,b); if(t%d)Continue; b=b* (t/d); for(intI=2; i<=2*n;i++) { if(i&1) { if(((a*f[i-1]+B)%mod)! =F[i]) {OK=0; Break; } } ElseF[i]= (a*f[i-1]+B)%MoD; } if(OK) Break; } for(intI=2; i<=2*n;i+=2) printf ("%lld\n", F[i]); return 0;}
uva12169 disgruntled Judge