【基础题】数论系列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
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

题目

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

题目

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"<

你可能感兴趣的:(HDU,题解,HDU,数论)