What day is that day? --数学

What day is that day?

Time Limit: 2 Seconds      Memory Limit: 65536 KB

It's Saturday today, what day is it after 11 + 22 + 33 + ... +NN days?

Input

There are multiple test cases. The first line of input contains an integer T indicating the number of test cases. For each test case:

There is only one line containing one integer N (1 <= N <= 1000000000).

Output

For each test case, output one string indicating the day of week.

Sample Input
2
1
2
Sample Output
Sunday
Thursday
Hint

A week consists of Sunday, Monday, Tuesday, Wednesday, Thursday, Friday and Saturday. 



题意很很简单

1^1 + 2^2 + 3^3 + 4^4 …n^n = 1^1 + 2^2 + 3^3 +4 ^4 + 5^5 + 6^6 + 7^7 + 1^8 + 2^9 + 3^10 ........(n-n/7*7)^n ;

得到一个循环节

下列数均对 7取余


得到一个每过6个循环节的循环



#include <stdio.h>
int main()
{
    int t , n , m , k , num , i , j ;
    int a[7] = {0,5,1,1,6,0,0} ;
    int b[8][7] = { {0},{0,1,1,1,1,1,1},{0,2,4,1,2,4,1},{0,3,2,6,4,5,1},{0,4,2,1,4,2,1},{0,5,4,6,2,3,1},{0,6,1,6,1,6,1} } ;
    scanf("%d", &t);
    while(t--)
    {
        scanf("%d", &n);
        m = n / 7 ;
        k = m / 6 ;
        num = (k*6) % 7 ;
        k = m - ( k * 6) ;
        for(i = 1 ; i <= k ; i++)
        {
            num += a[i] ;
            num %= 7 ;
        }
        int s = n - (m * 7) ;
        for(i = 1 ; i <= s ; i++)
        {
            k = (m*7+i)%6 ;
            if(k == 0)
                k = 6 ;
            num += b[i][k] ;
            num %= 7 ;
        }
        if(num == 0)
            printf("Saturday\n");
        else if(num == 1)
            printf("Sunday\n");
        else if(num == 2)
            printf("Monday\n");
        else if(num == 3)
            printf("Tuesday\n");
        else if(num == 4)
            printf("Wednesday\n");
        else if(num == 5)
            printf("Thursday\n");
        else if(num == 6)
            printf("Friday\n");
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值