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 ", save[start][solve(t[start])]); } return 0; }