hdu 1061Rightmost Digit(水题 快速幂 分治)

Posted zhangjiuding

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu 1061Rightmost Digit(水题 快速幂 分治)相关的知识,希望对你有一定的参考价值。

题目分析:

虽然只要求pow(x,x)%10,但是思路和求快速幂pow(x,y)%mod一样。

前者相当于后者的简化版。

解题思路

  1. 若次数y为1,则pow(x,1)%mod = x%mod;
  2. 若次数y为奇数2n+1,可求出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;

以上是关于hdu 1061Rightmost Digit(水题 快速幂 分治)的主要内容,如果未能解决你的问题,请参考以下文章

HDU 1061 Rightmost Digit(找规律)

hdu 1061 Rightmost Digit

HDU 1061 [Rightmost Digit] 数学方法

hdu-1061 Rightmost Digit

HDU-1061-Rightmost Digit

hdu1061Rightmost Digit(快速幂取余)