题目1442:A sequence of numbers
//题目1442:题中所给的序列为算术几何序列,也就是等差或者等比序列
//所以,在读入序列之后,利用序列前三个数判断该序列是等比序列还是等差序列。
//据说直接判断是否为等差序列比较省时间。如果该序列不是等差序列 ,则必定是等比序列
// 等差序列利用公式即可求得------an=a1+(n-1)*d
//等比序列,遵照二分求幂的原则可求得---------an=a1*q^(n-1)
//You can assume 0 < K <= 10^9, and the other three numbers are in the range [0, 2^63)
//关于题中变量 大小的 设定 ,另外三个数都是2^63 -1,说明需要用 long long 来存储
// 输出 取模 Output one line for each test case, that is, the K-th number module (%) 200907.#include <cstdio>
#define ret 200907
int main(){int n;while(scanf("%d",&n)!=EOF){while(n--){long long a,b,c,k;long long ans;scanf("%lld%lld%lld%lld",&a,&b,&c,&k); //判断是等差还是等比if((b-a)==(c-b)){//是等差数列 ans=a%ret+(((k-1)%ret)*((b-a)%ret))%ret;//对此处数值的范围 不是很明了 ,在哪里取模才正确 }else{ //是等比数列 --------二分求幂 long long q=b/a;long long m=k-1;ans=1;while(m!=0){if(m%2==1){ans=(ans*q)%ret;}m=m/2;q=(q*q)%ret;}ans=((a%ret)*ans)%ret;}printf("%lld\n",ans);}}return 0;
}