ACM刷题之ZOJ————What day is that day?

来源:互联网 发布:c语言 逗号分隔符 编辑:程序博客网 时间:2024/05/17 08:06
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

212

Sample Output

SundayThursday

Hint

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




初看这题目,以为是快速幂,但看了范围后,感觉应该是规律题。

总结下做规律题的方法,尽可能的多大几组数据(要保证数据是正确的)

然后放到sublime里面找字串就好了。这题我找出的规律是294 但是网上说规律是40多

可能找的太急,找到了规律的倍数吧


下面是ac代码(里面有快速幂取模的代码)

#include<stdio.h>int qmod(int a,int b){int r=1;while(b){if(b&1)r=((r%7)*(a%7))%7;a=((a%7)*(a%7))%7;b>>=1;}return r;}int x[400];int main(){int zu,c=0,n,q;long long k;for(int i=1;i<300;i++){//if(!(i%7))//printf("\n\n");c+=qmod(i,i);x[i]=(c%7);}scanf("%d",&n);while(n--){scanf("%lld",&k);k=k%294;if(x[k]==0){printf("Saturday\n");}else if(x[k]==1){printf("Sunday\n");}else if(x[k]==2){printf("Monday\n");}else if(x[k]==3){printf("Tuesday\n");}else if(x[k]==4){printf("Wednesday\n");}else if(x[k]==5){printf("Thursday\n");}else if(x[k]==6){printf("Friday\n");}}}


0 0