快速幂模板题

快速幂

主要思路是参考题解来的

快速幂题目思想

1.利用二进制位运算实现快速幂求解
2.如果二进制位上是0就跳过发,否则就运算

具体思想参考代码就行

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e5 + 10;
const int mod = 1e9 + 7;
ll fastpow(ll a, ll b)
{
    ll res = 1; //用res返回结果
    while (b)
    {
        if (b & 1) //如果b的最后一位是1,表示这个地方需要乘
            res = res * a % mod;
        b >>= 1;         //b右移一位,把刚刚处理过的b的最后一位去掉
        a = a * a % mod; //推算乘积
    }
    return res;
}
int main()
{
    ll n, t;
    scanf("%lld", &t);
    while (t--)
    {
        scanf("%lld", &n);
        printf("%lld\n", n * fastpow(2, n - 1) % mod);
    }
}