1. 程式人生 > >HDU 1163 Eddy's digital Roots(九餘數定理)

HDU 1163 Eddy's digital Roots(九餘數定理)

九餘數定理:
一個數對九取餘後的結果稱為九餘數。
一個數的各位數字之和相加後得到的<10的數字稱為這個數的九餘數(如果相加結果大於9,則繼續各位相加。

#include <iostream>
#include <cstdio>

using namespace std;

/**九餘數定理
一個數對九取餘後的結果稱為九餘數。
一個數的各位數字之和相加後得到的<10的數字稱為這個數的九餘數(如果相加結果大於9,則繼續各位相加
**/
int pow_mod(int a ,int n,int m)
{
    if(n == 0)
        return 1;
    int x = pow_mod(a,n / 2,m);
    long long ans = (long long)x * x % m;
    if(n%2 == 1)
        ans = ans *a % m;
    return (int)ans;
}

int main()
{
    int n, m, res;
    while(scanf("%d", &n) != EOF && n)
    {
        res = pow_mod(n, n, 9);
        if(res)
            printf("%d\n", res);
        else
            printf("9\n");
    }
    return 0;
}