题目大意&&思路:B-A=C*x-2^k*y 扩展欧几里德
好久没一血了。感懂~~~呜呜。
AC program:
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
using namespace std;
__int64 exgcd(__int64 a,__int64 b,__int64 &x, __int64 &y )
{
__int64 t,d;
if(b==0)
{
x=1;
y=0;
return a;
}
d=exgcd(b,a%b,x,y);
t=x;
x=y;
y=t-(a/b)*y;
return d;
}
int main()
{
__int64 a,b,c,k,MM,ar,br;
while(cin>>a>>b>>c>>k)
{
if(!a&&!b&&!c&&!k)break;
__int64 tmp=(__int64)pow(2.0,k*1.0);
MM=exgcd(c,tmp,ar,br);
if((b-a)%MM)
cout<<"FOREVER"<<endl;
else
{
__int64 s=tmp/MM;
ar=ar*(b-a)/MM;
cout<<(ar%s+s)%s<<endl;
}
}
//system("pause");
return 0;}

本文介绍了一种使用扩展欧几里德算法解决特定数学问题的方法,通过具体实例展示了如何利用该算法来求解B-A=C*x-2^k*y形式的方程,并提供了完整的C++代码实现。
275

被折叠的 条评论
为什么被折叠?



