zoukankan      html  css  js  c++  java
  • HDU2817 A sequence of numbers

    问题链接: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;
    }


  • 相关阅读:
    接水问题
    几种走法
    过河卒

    计数问题
    Java和C或C++的数据类型对照表
    记一次在家办公远程公司数据库的解决方案
    java nio 笔记
    mysql绿色版安装 遇到的问题
    mysql绿色版安装
  • 原文地址:https://www.cnblogs.com/tigerisland/p/7564575.html
Copyright © 2011-2022 走看看