hdu 2769 uva 12169 Disgruntled Judge 拓展欧几里德

//数据是有多水 连 10^10的枚举都能过

关于拓展欧几里德:大概就是x1=y2,y1=x2-[a/b]y2,按这个规律递归到gcd(a,0)的形式,此时公因数为a,方程也变为a*x+0*y=gcd(a,0)的形式,显然解为x=1,y=0,然后再递归回去就能得到解(a*x+b*y=gcd(a,b)的解)

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cmath>
 4 #include<algorithm>
 5 #include<cstring>
 6 #include<cstdlib>
 7 #include<queue>
 8 #include<vector>
 9 #include<map>
10 #include<stack>
11 #include<string>
12 
13 using namespace std;
14 
15 long long T;
16 long long x[201];
17 
18 void exGED(long long a,long long b,long long &d,long long &x,long long &y){
19     if (b==0){
20             x=1;
21             y=0;
22             d=a;
23     }
24     else{
25             exGED(b,a%b,d,x,y);
26             long long tmp=x;
27             x=y;
28             y=tmp-(a/b)*y;
29     }
30 }
31 
32 bool solve(long long a){
33     long long d,b,k;
34     long long tmp=x[3]-a*a*x[1];
35     exGED(a+1,10001,d,b,k);
36     if (tmp%d!=0) return false;
37     b=b*(tmp/d);
38     for (long long i=2;i<=2*T;i++){
39             if (i%2==0){
40                     x[i]=(x[i-1]*a+b)%10001;
41             }
42             else{
43                     if (x[i]!=((x[i-1]*a+b)%10001)){
44                             return false;
45                     }
46             }
47     }
48     for (long long i=2;i<=2*T;i+=2){
49             printf("%I64d\n",x[i]);
50     }
51     return true;
52 }
53 
54 int main(){
55     scanf("%I64d",&T);
56     for (long long i=1;i<2*T;i+=2){
57             scanf("%I64d",&x[i]);
58     }
59     //solve(1096);
60     for (long long a=0;a<=10000;a++){
61             if (solve(a)) break;
62     }
63     return 0;
64 }
65 /*
66 3
67 17
68 822
69 3014
70 */
View Code

 

转载于:https://www.cnblogs.com/baby-mouse/p/4635271.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值