AcWing 1301. C 循环
原题链接
简单
作者:
普通朋友
,
2023-02-06 13:27:50
,
所有人可见
,
阅读 162
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
LL exgcd(LL a,LL b,LL &x,LL &y)
{
if(b==0)
{
x=1,y=0;
return a;
}
LL d=exgcd(b,a%b,y,x);
y-=a/b*x;
return d;
}
int main()
{
LL a,b,c,k;
while(cin>>a>>b>>c>>k,a||b||c||k)//逻辑或:表达式1 || 表达式2 || 表达式3...如果表达式1的运算结果为true,则整个表达式的结果为true,同时不会再执行后面的表达式,
// 如果表达式1的运算结果为false,则根据表达式2的运算结果继续判断。
{
LL x,y;
LL z=1ll<<k;//这里用1ll,
LL gcd=exgcd(c,z,x,y);
if((b-a)%gcd!=0)puts("FOREVER");//不能整除就是无解
else {
x*=(b-a)/gcd;
z/=gcd;
printf("%lld\n",(x%z+z)%z);
}
}
return 0;
}