快速幂
【题目描述】
给你两个int范围内的整数 a 和 b ,请求出 a 的 b 次方的个位数字是多少。
比如,假设 a == 3, b == 5,那么 3 的 5 次方是 243 ,它对应的数位数字是 3。
【输入格式】
输入一行包含两个 int 范围内的整数 a 和 b (1<=a,b<2^31),它们之间以一个空格分隔。
【输出格式】
输出一行包含一个整数,用于表示 a 的 b 次方的个位数字。
【样例输入】
3 5
【样例输出】
3
【题目描述】
这道题目用传统的方法做需要 O(b) 的时间复杂度,而 b 可能达到 20亿 的数据范围,所以按照传统方法是不可行的。
但是我们可以用分治的思想,求 a 的 b 次方之前,先求 a 的 b/2 次方。这样我们只需要 O(log b) 的时间复杂度就可以求解问题了。
实现代码如下:
#include <bits/stdc++.h> using namespace std; int calc(int a, int b) { if (b == 0) return 1; if (b == 1) return a % 10; a %= 10; int tmp = calc(a, b/2); tmp = tmp * tmp % 10; if (b % 2) tmp = tmp * a % 10; return tmp; } int a, b; int main() { cin >> a >> b; cout << calc(a, b) << endl; return 0; }