Kang_TJU的博客

潮平两岸阔,风正一帆悬

快速幂 jobdu-1447


问题

看下面的问题: [ jobdu-1442]

题目描述:
Xinlv wrote some sequences on the paper a long time ago, they might be arithmetic or geometric sequences. The numbers are not very clear now, and only the first three numbers of each sequence are recognizable. Xinlv wants to know some numbers in these sequences, and he needs your help.
输入:
The first line contains an integer N, indicting that there are N sequences. Each of the following N lines contain four integers. The first three indicating the first three numbers of the sequence, and the last one is K, indicating that we want to know the K-th numbers of the sequence.
You can assume 0 < K <= 10^9, and the other three numbers are in the range [0, 2^63). All the numbers of the sequences are integers. And the sequences are non-decreasing.
输出:
Output one line for each test case, that is, the K-th number module (%) 200907.
样例输入:
2
1 2 3 5
1 2 4 5
样例输出:
5
16

思路

基本题,思路并不难。
要用到快速幂。
有一个要注意的点,中间过程有益处的可能性。小心!

代码

#include <iostream>
typedef long long ll;

ll arr[3];
const int MOD = 200907;

int fast_pow( ll a, ll b, int mod );

int main( void )
{
    int t = 0;
    std::cin >> t;
    while( t-- )
    {
        for( int i = 0; i < 3; ++i )
            std::cin >> arr[i];
        int k = 0;
        std::cin >> k;
        int ans = 0;
        if( arr[0] - arr[1] == arr[1] - arr[2] )
        {
            ans = (arr[0]%MOD + ((k-1)%MOD * (arr[1] - arr[0])%MOD)%MOD)%MOD;
        }
        else
        {
            ans = (arr[0]%MOD * fast_pow(arr[1]/arr[0], k-1, MOD))%MOD;
        }
        std::cout << ans << std::endl;
    }
    return 0;
}

int fast_pow( ll a, ll b, int mod )
{
    int ans = 1;
    ll w = a;// 这里小心,如果不是ll。可能 w%mod * w%mod这里就溢出了
    while(b)
    {
        if(b%2)
            ans = (ans * w)%mod;
        w = (w%mod * w%mod)%mod;
        b /=2 ;
    }
    return ans;
}

总结

改bug的时候如果感觉没有思路,哪怕不明确。但是有一点感觉就先试试,先把问题解决了再说。本体题目提示了数据范围较大,但是还是没有找到具体哪个过程的溢出。不妨先试试,找一个可能的方向。先把问题及时解决了,在回过头了看。


阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Kang_TJU/article/details/52374514
个人分类: ACM-数学问题
想对作者说点什么? 我来说一句

快速幂模板

2017年10月18日 229B 下载

快速幂:一种经过优化的算法

2009年08月04日 109B 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭