1. 程式人生 > >快速冪的題

快速冪的題

pow urn const ++ main 事先 cin turn 是否

技術分享圖片

#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;
}

快速冪的題