HDU1061 Rightmost Digit
题目大意:输入一个正整数n,计算nn的个位数字。
解题思路:刚开始是想n次方的个位数字只与n的个位数有关,所以就计算了n的个位数的n次方,提交了之后果然TLE了。后来对每个数字的幂进行了计算,发现1~9每个数字的幂都是有周期的,1、5、6的任何次幂都是它本身,4、9幂的周期是2,2、3、8幂的周期是4,其实可以都当作周期为4,然后打表计算就可以啦。
注意:打表的时候要记得考虑个位数为0的情况。
#include
using namespace std;
int main()
{
int ans[10][4]=
{
0,0,0,0,
1,1,1,1,
2,4,8,6,
3,9,7,1,
4,6,4,6,
5,5,5,5,
6,6,6,6,
7,9,3,1,
8,4,2,6,
9,1,9,1
};
int t;
long long n;
while(cin>>t)
{
while(t--)
{
cin>>n;
int a=n%10;
int b=n%4;
if(!b)
b=4;
cout<
HDU1097 A hard puzzle
题目大意:输入两个整数a和b,求ab的个位数字。
解题思路:同上题,a看个位数,b看有多少个周期,然后打表计算就行啦。
#include
using namespace std;
int main()
{
int ans[10][4]=
{
0,0,0,0,
1,1,1,1,
2,4,8,6,
3,9,7,1,
4,6,4,6,
5,5,5,5,
6,6,6,6,
7,9,3,1,
8,4,2,6,
9,1,9,1
};
int a,b;
while(cin>>a>>b)
{
a%=10;
b%=4;
if(!b)
b=4;
cout<
HDU1098 Ignatius’s puzzle
题目大意:已知函数f(x)=5x13+13x5+kax,输入一个非负整数k,求最小的非负整数a使得x取任意整数时f(x)都能被65整除,若不存在这样的a,就输出no。
解题思路:f(0)=0能被65整除,求一下f(x+1),根据二项式定理展开去掉肯定能被65整除的部分,还有f(x)+18+k*a,要使之后的都能被65整除,看18+k*a即可。所以循环的时候a从1开始计算到65即可,因为到66的时候就和a=1的时候相同了。
#include
using namespace std;
int main()
{
int k;
int i;
while(cin>>k)
{
if(!k)
cout<<"no"<65)
cout<<"no"<