快速幂的题

#include <bits/stdc++.h>
using namespace std;


long long powM(long long a, long long b, long long mode)
{
    long long sum = 1;
    a = a % mode;
    while (b > 0) {
        if (b % 2 == 1)     //判断是否是奇数,是奇数的话将多出来的数事先乘如sum
            sum = (sum * a) % mode;
        b /= 2;
        a = (a * a) % mode;// 不断的两两合并再取模,减小a和b的规模
    }
    return sum;
}



int main () {
    long long n, m, k, x;
    cin >> n >> m >> k >> x;
    cout << (m * powM(10, k, n) + x) % n << endl;
}

 

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

const long long MODE = 100000007;
long long powM(long long a, long long b, long long mode)
{
    long long sum = 1;
    a %= mode;
    while (b) {
        if (b & 1)     //判断是否是奇数,是奇数的话将多出来的数事先乘如sum
            sum = (sum * a) % mode;
        b >>= 1;
        a = (a * a) % mode;// 不断的两两合并再取模,减小a和b的规模
    }
    return sum;
}


int main () {
    int N;
    cin >> N;
    while (N--) {
        ll flag = 1;
        ll n, k;
        cin >> n >> k;
        if (n & 1)
            flag = - 1;
        cout << (powM(k - 1, n, MODE) % MODE + (flag * (k - 1)) % MODE) % MODE << endl;
        
    }
}

 

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;


long long powM(long long a, long long b, long long mode)
{
    long long sum = 1;
    a %= mode;
    while (b) {
        if (b & 1)     //判断是否是奇数,是奇数的话将多出来的数事先乘如sum
            sum = (sum * a) % mode;
        b >>= 1;
        a = (a * a) % mode;// 不断的两两合并再取模,减小a和b的规模
    }
    return sum;
}


int main () {
    ll a, b, c, d, e;
    cin >> a >> b >> c >> d >> e;
    ll f = powM(a, c * d, e) % e;
    ll g = powM(b, c * d, e) % e;
    cout << (f * g) % e << endl;
}
作者:LightAc
出处:https://www.cnblogs.com/lightac/
联系:
Email: dzz@stu.ouc.edu.cn
QQ: 1171613053
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
原文地址:https://www.cnblogs.com/lightac/p/10629867.html