海岛Blog

海是无垠的,岛在海中是独立的,有一片自己的天空

UVA10515 Powers Et Al.【数学+Ad Hoc】

Finding the exponent of any number can be very troublesome as it grows exponentially. But in this problem you will have to do a very simple task. Given two non-negative numbers m and n, you will have to find the last digit of mn in decimal number system.

Input

The input file contains less than 100000 lines. Each line contains two integers m and n (Less than 10^101. Input is terminated by a line containing two zeroes. This line should not be processed.

Output

For each set of input you must produce one line of output which contains a single digit. This digit is the last digit of m^n.

Sample Input

2 2

2 5

0 0

Sample Output

4

2


问题链接UVA10515 Powers Et Al.

问题简述

  计算n^m 的最后一位。

问题分析

  本题的关键是n和m都非常大。

  对于n,只需要取最后一位进行计算就可以了。

  对于m,处理起来就比较麻烦,需要掌握其规律。1位数字d的n次方,即d^n,会每4次方出现循环,所以只需要考虑n的最低2位(百位以上是4的倍数),再做个模除4再行计算即可。

程序说明:(略)

题记:(略)

参考链接:(略)


AC的C++语言程序如下:
/* UVA10515 Powers Et Al. */

#include <bits/stdc++.h>

using namespace std;

const int MOD = 4;

int getb(string n)
{
    if (n.size() == 1)
        return n[0] - '0';
    int b =n[n.size() - 1] - '0';
    b = b + (n[n.size() - 2] - '0') * 10;
    b %= 4;
    if (b == 0)
        b=4;
    return b;
}

int main()
{
    string m, n;
    while(cin >> m >> n && (m != "0" || n != "0")) {
        int a = m[m.length() - 1] - '0';
        int b = getb(n);

        int ans = a;
        for(int i = 1; i < b; i++)
            ans *= a;

        printf("%d\n", ans % 10);
    }

    return 0;
}





阅读更多
所属专栏: ACM题解
想对作者说点什么? 我来说一句

Deep learning (Ian Goodfellow et. al)

2017年10月15日 68.71MB 下载

ad-hoc与In-House的区别

u012963325 u012963325

2016-02-22 18:38:02

阅读数:1994

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭