首页 > 代码库 > UVa 10515 - Powers Et Al.

UVa 10515 - Powers Et Al.

题目:计算n^m 的最后一位。

分析:数论。结果的最后一位,只与n最后一位有关,而0~9的幂都是以2或4为循环周期的。

            计算m模4的余数r和n的尾数k,则k^r就是结果。

说明:其实也可以用快速幂,不过这个更快(⊙_⊙)。

#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>

using namespace std;

int value[10][4] = {
	0,0,0,0,
	1,1,1,1,
	6,2,4,8,
	1,3,9,7,
	6,4,6,4,
	5,5,5,5,
	6,6,6,6,
	1,7,9,3,
	6,8,4,2,
	1,9,1,9};

int main () 
{
	char a[104],b[104];
    while (scanf("%s%s",a,b) && (strcmp(a,"0")||strcmp(b,"0")) ) {
		if ( !strcmp(b, "0") ) {
			printf("1\n");
			continue;
		}
		int v = b[strlen(b)-1]-'0';
		if ( strlen(b) > 1 )
			v += (b[strlen(b)-2]-'0')*10;
		printf("%d\n",value[a[strlen(a)-1]-'0'][v%4]);
	}
    return 0;
}

UVa 10515 - Powers Et Al.