其他分享
首页 > 其他分享> > [一本通学习笔记] 快速幂

[一本通学习笔记] 快速幂

作者:互联网

好无聊啊

10193. 「一本通 6.1 例 1」序列的第 k 个数

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int modulo = 200907;

int qpow(int p, int q) {
    int r = 1;
    for (; q; (p *= p) %= modulo, q >>= 1)
        if (q & 1)
            (r *= p) %= modulo;
    return r;
}

int inv(int p) { return qpow(p, modulo - 2); }

signed main() {
    int T, a, b, c, k;
    cin >> T;
    while (T--) {
        cin >> a >> b >> c >> k;
        if (a + c == 2 * b) {
            cout << (a + (b - a) * (k - 1)) % modulo << endl;
        } else {
            if (k == 1)
                cout << a % modulo << endl;
            if (k == 2)
                cout << b % modulo << endl;
            if (k >= 3) {
                cout << (a * qpow(b / a, k - 1)) % modulo << endl;
            }
        }
    }
    return 0;
}

10194. 「一本通 6.1 练习 1」A 的 B 次方

#include <bits/stdc++.h>
using namespace std;
#define int long long
int a, b, m;
int qpow(int p, int q) {
    int r = 1;
    for (; q; (p *= p) %= m, q >>= 1)
        if (q & 1)
            (r *= p) %= m;
    return r;
}
signed main() {
    cin >> a >> b >> m;
    cout << qpow(a, b) << endl;
}

10196. 「一本通 6.1 练习 3」越狱

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int modulo = 100003;
int qpow(int p, int q) {
    int r = 1;
    for (; q; (p *= p) %= modulo, q >>= 1)
        if (q & 1)
            (r *= p) %= modulo;
    return r;
}

signed main() {
    int n, m;
    cin >> m >> n;
    cout << ((qpow(m, n) - qpow(m - 1, n - 1) * m) % modulo + modulo) % modulo << endl;
    return 0;
}

标签:qpow,modulo,cout,笔记,int,long,学习,一本,return
来源: https://www.cnblogs.com/mollnn/p/11621774.html