TOJ4757: 12345(数学)

传送门

时间限制(普通/Java):1000MS/3000MS     内存限制:65536KByte

描述

为了说明水题也不是那么好AC的,FD出了一个由数字1~5组成的题目,题意如下:

给定一个正整数n,求(1^n+2^n+3^n+4^n) mod 5的值。

其中:

(1)x^n:表示x的n次方;

(2)a mod b:表示a除以b的余数。

输入

输入数据有多组,每组占一行,每行一个正整数n(1 <= n <= 10100000)。

输出

每组输出占一行,每行一个整数,表示(1^n+2^n+3^n+4^n) mod 5的结果。

样例输入

4
124356983594583453458888889

样例输出

4
0

思路:

易知mod5等于几取决于(1^n+2^n+3^n+4^n)个位
易知1^n个位为1,1,1,1……2^n个位为2,4,8,6……3^n个位为3,9,7,1……4^n个位为4,6,4,6……
易知
当n=4k时(1^n+2^n+3^n+4^n)个位既是1+6+1+6的个位为4,即此时原式对5取模等于4
当n=4k+1时(1^n+2^n+3^n+4^n)个位既是1+2+3+4的个位为0,即此时原式对5取模等于0
当n=4k+2时(1^n+2^n+3^n+4^n)个位既是1+4+9+6的个位为0,即此时原式对5取模等于0
当n=4k+3或(n=4k-1)时(1^n+2^n+3^n+4^n)个位既是1+8+7+4的个位为0
所以本题只需要判断最后两位是否为4的倍数即可
如果是 则输出4 不是则为0 以上。

代码也很简单:

#include<cstdio> 
#include<string>
#include<iostream>
using namespace std;
int main(){
    string s;
    while(cin>>s)
    {
        int num=s.size()>1?(s[s.size()-1]-'0'+(s[s.size()-2]-'0')*10):(s[s.size()-1]-'0');
        printf(num%4?"0
":"4
");
    }
}
原文地址:https://www.cnblogs.com/Esquecer/p/8677483.html