UVA 12169

来源:互联网 发布:linux运维工程师薪资 编辑:程序博客网 时间:2024/06/05 15:39

【题目分析】
拓展欧几里得


【代码】

#include <cstdio>#include <cmath>#include <cstring>#include <iostream>#include <algorithm>#define ll long longusing namespace std;const int mod=10001;int n,p,q,d,b;int f[101],g[101];inline void exgcd(int a,int b,int & d,int & x,int & y){    if (b==0) {x=1;y=0;d=a;return;}    exgcd(b,a%b,d,y,x);    y-=x*(a/b);}int main(){    scanf("%d",&n);    for (int i=1;i<=n;++i) scanf("%d",&f[i]);    for (int a=0;a<mod;++a)    {        exgcd(a+1,mod,d,p,q);        if (((ll)f[2]-(ll)a*a*f[1])%d) continue;        b=(p*((ll)f[2]-(ll)a*a*f[1])/d)%mod;        int can=1;        g[1]=(f[1]*a+b)%mod;        for (int i=2;i<=n;++i)        {            if (f[i]!=(g[i-1]*a+b)%mod)            {                can=0;                break;            }            g[i]=(f[i]*a+b)%mod;        }        if (can)            {for (int i=1;i<=n;++i) printf("%d\n",g[i]); return 0; }    }}
0 0