题目:pku2115 思路:(a+tc)%n=b --> a%n+t *c%n=b -->t*n %c=b-a -->nt=(n-a)%n 同余方程 代码: // 0 <= A, B, C < 2^k) are the parameters of the loop. #include <iostream> using namespace std; __int64 xx,yy; __int64 extend_gcd(__int64 a,__int64 b) { if(b==0){ xx=1;yy=0;return a; } __int64 ans,temp; ans=extend_gcd(b,a%b); temp=xx;xx=yy;yy=temp-a/b*yy; return ans; } //返回最小的x。 void equation(__int64 a,__int64 b,__int64 n) { __int64 d; d=extend_gcd(a,n); if(b%d!=0)printf("FOREVER/n"); else { xx=xx*b/d; xx=xx%n; xx=(xx%(n/d)+n/d)%(n/d); printf("%I64d/n",xx); } } int main() { __int64 a,b,c,k; //freopen("pku2115in.txt","r",stdin); while(scanf("%I64d%I64d%I64d%I64d",&a,&b,&c,&k)!=EOF) { if(!(a||b||c||k))break; __int64 i,temp; temp=(__int64)1<<k; equation(c,b-a,temp); } return 0; }