魔力转圈圈(快速幂)

魔力转圈圈(快速幂)_第1张图片
魔力转圈圈(快速幂)_第2张图片

分析:
1,实质为取模运算:(初始位置 + 移动的总位置) % n
2,数量太大需用到快速幂:
	指数转为二进制计算
	快速幂快的实质:把指数k搞成一串二进制数,一位一位的算幂并取模
	这样可以避免数据溢出,同时将原来的时间复杂度O(n):--->o(logn)
3pow()函数在多运算符的式子中使用可能会报错:自己写一个函数
#include 
using namespace std;
int n,m,k,x;
long long qortpow(long a,long b){
     
    int res = 1;
	while(b > 0){
      
        if(b & 1){
      //指数为0无需考虑
        res = res * a % n;   //记录当前余数
    }
    a = a * a % n;  //a计算到当前幂后的结果
    b = b >> 1;     //指数左移一位
    }
    return res;//返回余数
}
int main(){
     
    cin >> n >> m >> k >> x;
    cout << (x + qortpow(10, k) * m % n) % n << endl;
    return 0;
}

你可能感兴趣的:(蓝桥杯--第十章--二分查找)