问题链接:HDU2817 A sequence of numbers。基础训练题,用C语言编写程序。
这个问题是输入三个数,判断是等差数列还是等比数列,然后按照相应的数列进行计算,再做模除计算。
解决这个问题需要注意两点,一是计算模幂(套路);二是输入的数据需要使用long long类型。
计算模幂需要用二分法,以便加快计算速度。
AC程序如下:
/* HDU2817 A sequence of numbers */ #include <stdio.h> #define M 200907 // 模幂计算 long long powermod(long long a, long long n, int m) { long long res = 1L; while(n) { if(n & 1L) { // n % 2 == 1 res *= a; res %= m; } a *= a; a %= m; n >>= 1; } return res; } int main(void) { int n; long long a, b, c, si, k; scanf("%d", &n); while(n--) { // 读入数据 scanf("%lld%lld%lld%lld", &a, &b, &c, &k); // 判定数列类型 if(b-a == c-b) { // 按照等差数列计算 int d = b - a; si = (a + (k - 1)*d) % M; } else { int q = b / a; si = (a * powermod(q, k-1, M)) % M; } // 输出结果 printf("%lld ", si); } return 0; }