ZOJ 3785 What day is that day? (数论 循环节)
2017-02-16 10:52
381 查看
思路:
对于任意一个数N 我们都可以将之分解为 N = 7 * k + m,所以 NN=(7∗k+m)N 通过二项展开式,我们可以得到 mN
由观察得到7作为一个质数,一定与N(除了7的倍数,但是如果这个数是7的倍数那么模完直接就为0了)互质,这样的话就满足了费马小定理的条件(p是质数,底数与p互质),所以有 mp−1=1(modp)(ps:p=7)
所以可以进一步化简为 mt 此时 0<=m <= 6 , 0<=t<=5
m和t都是以1为值增加的,所以我们可知这42种情况会循环出现。
进一步推广,虽然增加的数是没42个一循环,但是加上前边的数字就不一定了,所以,更大的循环节为42*7 = 294
#include <iostream> #include <cstdio> #include <string.h> #include <queue> #include <algorithm> #include <map> typedef long long int lli; using namespace std; int a[400]; int qp(int a,int b,int c){ int ans = 1; for(;b;b>>=1){ if(b&1) ans = ans * a % c; a = a * a % c; } return ans; } char s[7][200] = {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}; int main(){ int t; a[1] = 1; for(int i = 2;i <= 300;i++){ a[i] = ( a[i-1] + qp(i,i,7) )% 7; } a[0] = a[294]; cin>>t; int n; int ans = 0; while(t--){ ans = 0; scanf("%d",&n); printf("%s\n",s[ (6+a[n % 294]) %7]); } }
相关文章推荐
- ZOJ 3785 What day is that day?(最小循环节)
- ZOJ 3785-What day is that day?-数论(费马小定理) / 打表找规律
- ZOJ 3785 What day is that day?(循环节找规律)
- ZOJ 3785 What day is that day? 循环节找规律
- ZOJ 3785 What day is that day?(打表找周期)
- ZOJ - 3785 —— What day is that day? —— 打表
- ZOJ-3785【What day is that day?】
- ZOJ3785-What day is that day?
- zoj 3785 What day is that day?
- zoj 3785 What day is that day?
- ZOJ 3785 What day is that day?
- ZOJ 3785 What day is that day?
- zoj 3785 What day is that day?
- 【ZOJ】3785 What day is that day? ——KMP 暴力打表找规律
- ZOJ-3785 What day is that day?
- ZOJ-3785-What day is that day?【11th浙江省赛】【打表找规律】【快速幂】
- zoj 3785 What day is that day?
- ZOJ 3785 What day is that day?(费马小定理智寻循环节)
- ZOJ 3785 - What day is that day?
- ZOJ 3785 What day is that day?