【基础题】数论系列1-HDU1061、1097、1098

HDU1061 Rightmost Digit

题目

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<iostream>
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<<ans[a][b-1]<<endl;
        }
    }
    return 0;
}

HDU1097 A hard puzzle

题目

HDU1097 A hard puzzle

题目分析

题目大意:输入两个整数a和b,求ab的个位数字。
解题思路:同上题,a看个位数,b看有多少个周期,然后打表计算就行啦。

代码实现
#include<iostream>
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<<ans[a][b-1]<<endl;
    }
    return 0;
}

HDU1098 Ignatius’s puzzle

题目

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<iostream>
using namespace std;

int main()
{
    int k;
    int i;
    while(cin>>k)
    {
        if(!k)
            cout<<"no"<<endl;
        else
        {
            for(i=1; i<=65; ++i)
            {
                if((18+k*i)%65==0)
                {
                    cout<<i<<endl;
                    break;
                }
            }
            if(i>65)
                cout<<"no"<<endl;
        }
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值