快速幂 jobdu-1447
来源:互联网 发布:国家去库存政策 知乎 编辑:程序博客网 时间:2024/04/28 02:46
问题
看下面的问题: [ 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的时候如果感觉没有思路,哪怕不明确。但是有一点感觉就先试试,先把问题解决了再说。本体题目提示了数据范围较大,但是还是没有找到具体哪个过程的溢出。不妨先试试,找一个可能的方向。先把问题及时解决了,在回过头了看。
- 快速幂 jobdu-1447
- jobdu-1447-最短路
- Jobdu 题目1447:最短路
- JobDu 1202(冒泡排序,插入排序和快速排序
- JOBDU Q1001
- JOBDU Q1002
- JOBDU Q1003
- JOBDU Q1004
- [Jobdu] 1005:Graduate Admission
- jobdu 1 排序
- jobdu 2 成绩排序
- jobdu 4 excel排序
- jobdu 6 日期差值
- jobdu 9 打印日期
- jobdu 21 FatMouse
- jobdu 27 简单计算器
- jobdu 39 特殊乘法
- jobdu 44 数制转换
- Python爬虫设置代理IP爬取知乎图片
- 冒泡排序
- 基于ftp实现一个类dropbox文件同步程序
- 简单工厂模式
- 布隆过滤器(Bloom Filter)详解
- 快速幂 jobdu-1447
- python下载安装
- dotnet 你不得不晓得的一个编译开发工具
- java调.py文件指南
- Week1-0Introduction
- 回复:计算机专业,大二学生的困惑
- Oracle:SQL语句--对表的操作——添加主键约束
- StringUtils方法全集
- Android网络状态判断