首页 > 代码库 > UVA 10515 - Powers Et Al.(数论)

UVA 10515 - Powers Et Al.(数论)

UVA 10515 - Powers Et Al.

题目链接

题意:求出m^n最后一位数

思路:因为m和n都非常大,直接算肯定是不行的,非常easy想到取最后一位来算,然后又非常easy想到最后一位不断乘自身肯定会形成周期。而且这个周期还挺短的,于是先求出周期,然后用n去取模该周期求出答案是第几个就可以

代码:

#include <stdio.h>
#include <string.h>

int t[10];
int save[10][10];
char n[105], m[105];

int solve(int num) {
	int lenn = strlen(n);
	int mod = 0;
 	for (int i = 0; i < lenn; i++) {
		mod = (mod * 10 + n[i] - ‘0‘) % num;
 	}
 	mod--;
 	if (mod < 0) mod = num - 1;
 	return mod;
}

int main() {
	for (int i = 0; i < 10; i++) {
		int tmp = i;
		save[i][t[i]++] = i;
		tmp = tmp * i % 10;
		while (tmp != i) {
			save[i][t[i]++] = tmp;
   			tmp = tmp * i % 10;
  		}
 	}
  	while (~scanf("%s%s", m, n)) {
   		if (strcmp(m, "0") == 0 && strcmp(n, "0") == 0) break;
   		int start = m[strlen(m) - 1] - ‘0‘;
   		printf("%d\n", save[start][solve(t[start])]);
    } 	
	return 0;
}


UVA 10515 - Powers Et Al.(数论)