时间限制(普通/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 "); } }