HDU2817 A sequence of numbers

来源:互联网 发布:jquery latest.js cdn 编辑:程序博客网 时间:2024/05/16 03:58

问题链接: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\n", si);    }    return 0;}


1 0
原创粉丝点击