题目描述
“天阶夜色凉如水,卧看牵牛织女星。”
小明是一个喜爱幻想的孩子。每天晚上,他都会静静地躺在家门前的草地上,抬头仰望天空,幻想着天上星星的故事,天空中,数颗星星一闪一闪地眨着眼睛,好像在回应他的遐想。前不久,小明看完了童话书中牛郎与织女的故事,很想找到天上的牛郎织女,可天上的星星那么多,哪一颗才是他们的化身呢?小明百思不得其解。
一天晚上,小明仰望星空时,不知不觉间睡着了,梦里,他看见牛郎徘徊在喜鹊桥上。原来,牛郎遇到了一个麻烦,七月初七到了,牛郎本该与织女相会,可丧心病狂的天神不甘让牛郎织女见面,于是在喜鹊桥上安装了t个密码门。每个密码门上面有两个数n,m,而密码为n^m次方的值,牛郎需要破解所有的密码门,才能走过喜鹊桥见到织女。而牛郎本是屠夫,计算能力自然不敢恭维了,小明呢,则满心欢喜地想着听织女姐姐讲故事,根本无暇顾及破解密码。所以,作为小明的朋友,这个任务就交给你啦。
输入
从文件 a.in
中读入数据。
第一行,一个正整数t,表示一共有t个密码门
接下来t行,每行两个正整数n,m(n,m≤10^10),表示密码门上的数字
输出
输出到文件 a.out
中。
t行,每行一个整数,表示密码门对应的密码,由于答案过大,你只需要输出密码的最后一位
样例输入
2 3 4 4 5
样例输出
1 4
数据范围限制
对于30%的数据,1≤t≤20,1≤n,m≤8
对于100%的数据,1≤t≤1000,1≤n,m≤10^10
思路
既然题目要求输出最后一位,我们就只需要考虑最后一位即可。
最后一位会循环,存下循环节就行。
注意:不开long long见祖宗。
代码
#include <bits/stdc++.h>
using namespace std;
int gl[10][10]={
0,0,0,0,0,0,0,0,0,0,
0,1,0,0,0,0,0,0,0,0,
0,2,4,8,6,0,0,0,0,0,
0,3,9,7,1,0,0,0,0,0,
0,4,6,0,0,0,0,0,0,0,
0,5,0,0,0,0,0,0,0,0,
0,6,0,0,0,0,0,0,0,0,
0,7,9,3,1,0,0,0,0,0,
0,8,4,2,6,0,0,0,0,0,
0,9,1,0,0,0,0,0,0,0,
},gs[10]={0,1,4,4,2,1,1,4,4,2};
int main()
{
// freopen("a.in","r",stdin);
// freopen("a.out","w",stdout); long long t,n,m;cin>>t;for(int i=1;i<=(int)t;i++){cin>>n>>m;if(n%10==0){printf("0\n");continue;}int y=n%10;int x=(m-1)%gs[y]+1;printf("%d\n",gl[y][x]);}return 0;
}