POJ2115 C Looooops(线性同余方程)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ2115 C Looooops(线性同余方程)相关的知识,希望对你有一定的参考价值。

无符号k位数溢出就相当于mod 2k,然后设循环x次A等于B,就可以列出方程:

$$ Cx+A \equiv B \pmod {2^k} $$ $$ Cx \equiv B-A \pmod {2^k} $$

最后就用扩展欧几里得算法求出这个线性同余方程的最小非负整数解。

 1 #include<cstdio>
 2 #include<cstring>
 3 #define mod(x,y) (((x)%(y)+(y))%(y))
 4 #define ll long long
 5 ll exgcd(ll a,ll b,ll &x,ll &y){
 6     if(b==0){
 7         x=1; y=0;
 8         return a;
 9     }
10     ll d=exgcd(b,a%b,x,y);
11     ll t=y;
12     y=x-a/b*y;
13     x=t;
14     return d;
15 }
16 ll MLES(ll a,ll b,ll n){
17     ll x,y;
18     ll d=exgcd(a,n,x,y);
19     if(b%d) return -1;
20     return mod(x*(b/d),n/d);
21 }
22 int main(){
23     ll a,b,c,k;
24     while(~scanf("%lld%lld%lld%lld",&a,&b,&c,&k) && (a||b||c||k)){
25         k=1LL<<k;
26         ll res=MLES(c,b-a,k);
27         if(res==-1) puts("FOREVER");
28         else printf("%lld\n",res);
29     }
30     return 0;
31 }

 

以上是关于POJ2115 C Looooops(线性同余方程)的主要内容,如果未能解决你的问题,请参考以下文章

POJ 2115C Looooops[一元线性同余方程]

POJ2115 ZOJ2305 C Looooops同余方程

POJ-2115 C Looooops (模线性方程)

POJ 2115 C Looooops(模线性方程)

pku2115-C Looooops拓展欧几里得-不定方程

POJ 2115 单变元模线性方程