POJ NOI MATH-7831 计算星期几
- 问题链接:POJ NOI MATH-7831 计算星期几。
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
-
假设今天是星期日,那么过ab天之后是星期几?
- 输入
- 两个正整数a,b,中间用单个空格隔开。0 < a <= 100, 0 < b <= 10000。
- 输出
- 一个字符串,代表过ab天之后是星期几。
其中,Monday是星期一,Tuesday是星期二,Wednesday是星期三,Thursday是星期四,Friday是星期五,Saturday是星期六,Sunday是星期日。 - 样例输入
-
3 2000
- 样例输出
-
Tuesday
- 来源
- 《奥数典型题举一反三(小学六年级)》 (ISBN 978-7-5445-2883-2) 模拟试题二 第16题
问题分析
计算ab天是困难的,因为数会很大。好在每周是7天,所以可以使用快速模幂运算来解决。
程序说明
(略)。
AC的C++语言程序:
#include <iostream> #include <string> using namespace std; const int DAYS = 7; string days[] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}; // 快速模幂函数 int powermod(int a, int n, int m) { int res = 1L; while(n) { if(n & 1L) { res *= a; res %= m; } a *= a; a %= m; n >>= 1; } return res; } int main() { int a, b, start = 0; cin >> a >> b; cout << days[(start + powermod(a, b, DAYS)) % DAYS] << endl; return 0; }