题意:给一输入序列,给出递归公式,求输出序列
思路:
有递推公式可得x3 = (ax2+b) %mod = (a (ax1 +b)%mod + b ) %mod;
所以x3 = [ aax1 + (a+1)*b ] %mod;
即:b*(a+1) - kmod = x3 - aa*x1; (k是整数)
其中a,b是未知的,a的范围在[0,10000],可以枚举a,用exgcd求出b,然后对奇数项进行判断。
ll ans[20010], fin[20010];
int main()
{
//freopen("in.txt", "r", stdin);
int n;
while (cin >> n)
{
f(i, 1, 2 * n)
{
scanf("%lld", &ans[i]);
i++;
}
ll mod = 10001;
f(a, 0, 10000)
{
ll tmp = ans[3] - a * a*ans[1];
ll b, y, d;
ex_gcd(a + 1, mod, b, y, d);
if (tmp%d != 0)continue;
b *= tmp / d;
int fg = 1;
fin[1] = ans[1];
f(i, 2, n * 2)
{
fin[i] = (a*fin[i-1] + b) % mod;
if (i & 1)
{
if (fin[i] != ans[i]) { fg = 0;break; }
}
}
if (fg)break;
}
f(i, 2, 2 * n)
{
printf("%lld\n", fin[i]);
i++;
}
}
return 0;
}