【HDU 1061]右端の桁(水パワーの問題を迅速に分割統治)

トピック分析:

けれどもしかPOW(X、x)の10%が、迅速な思考と電源POW(x、y)を求めて同じMOD%が必要です。

後者の簡略化されたバージョンに対応する前者。

問題解決のためのアイデア

  1. ; yは数1、POW(X、1)%MOD = X%MODある場合
  2. yは1 + 2Nである奇数回は、POW(X、N)、POW(X、Y)= POW(X、N)* POW(X、N)* Xを得ることができる場合
  3. yが偶数2n個である場合、POW(X、N)、POW(X、Y)= POW(X、N)* POW(X、n)を決定することができます

以下のコード(G ++)。

#include <bits\stdc++.h>

using namespace std;
typedef long long ll;
ll mod = 10;

//快速幂求pow(x,y)%mod
ll pow_mod(ll x, ll y) {
    //若次数y为1,则pow(x,1)%mod = x%mod;
    if (y == 1) return x;
    
    //若次数y为奇数2n+1,可求出pow(x,n),pow(x,y) = pow(x,n)*pow(x,n)*x
    //若次数y为偶数2n,可求出pow(x,n),pow(x,y) = pow(x,n)*pow(x,n)
    ll p = pow_mod(x, y / 2) % mod;
    if (y % 2) return (p * p * x) % mod;
    else return (p * p) % mod;
}

int main() {
    int t;
    cin >> t;
    while (t--) {
        ll n;
        cin >> n;
        cout << pow_mod(n, n) << endl;
    }
    return 0;
}

おすすめ

転載: www.cnblogs.com/zhangjiuding/p/11458437.html