2 条题解

  • 0
    @ 2025-10-8 16:58:26
    #include<bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    void exgcd(LL a,LL b,LL &d,LL &x,LL &y)
    {
    	if(b==0) { d=a;x=1;y=0;}
    	else
    	{
    		exgcd(b,a%b,d,y,x);
    		y-=(a/b)*x;
    	}	
    }
    int main()
    {
        LL a,b,c,k;
    	while(scanf("%lld%lld%lld%lld",&a,&b,&c,&k)!=EOF)
    	{
    		if(a==0&&b==0&&c==0&&k==0) break;
    		if(a==b) {printf("0\n");continue;}
    		k=((LL)1<<k); 
    	    LL A,B,d,x,y,K;
    	    A=c;B=k;K=b-a;
    	    exgcd(A,B,d,x,y);
    	    if(K % d!=0) printf("FOREVER\n");
    	    else
    	    {
    	    	LL db=abs(B/d);
    	    	x=x*K/d;
    			x=((x%db)+db)%db;
    			printf("%lld\n",x);
    	    }
    	}		
        return 0;
    }
    
    • 0
      @ 2025-10-8 16:58:18


      #include<bits/stdc++.h>
      using namespace std;
      typedef long long LL;
      void exgcd(LL a,LL b,LL &d,LL &x,LL &y)
      {
      	if(b==0) { d=a;x=1;y=0;}
      	else
      	{
      		exgcd(b,a%b,d,y,x);
      		y-=(a/b)*x;
      	}	
      }
      int main()
      {
          LL a,b,c,k;
      	while(scanf("%lld%lld%lld%lld",&a,&b,&c,&k)!=EOF)
      	{
      		if(a==0&&b==0&&c==0&&k==0) break;
      		if(a==b) {printf("0\n");continue;}
      		k=((LL)1<<k); 
      	    LL A,B,d,x,y,K;
      	    A=c;B=k;K=b-a;
      	    exgcd(A,B,d,x,y);
      	    if(K % d!=0) printf("FOREVER\n");
      	    else
      	    {
      	    	LL db=abs(B/d);
      	    	x=x*K/d;
      			x=((x%db)+db)%db;
      			printf("%lld\n",x);
      	    }
      	}		
          return 0;
      }




      • 1

      *【扩展欧几里得:解同余方程】C Looooops

      信息

      ID
      1770
      时间
      1000ms
      内存
      512MiB
      难度
      7
      标签
      (无)
      递交数
      97
      已通过
      22
      上传者