原来历史上1582年10月4日的下一天是1582年10月15日;
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
struct Date {
int y, m, d;
Date(int y=0,int m=0,int d=0):y(y),m(m),d(d){}
void nextDate() {
++d;
carryDay();
}
void carryDay() {
if(y==1582&&m==10&&d==5){
d=15;
return;
}
if(m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12) {
if(d == 32) {
d = 1;
++m;
carryMonth();
}
} else if(m != 2) {
if(d == 31) {
d = 1;
++m;
}
} else {
if(isLeapYear()) {
if(d == 30) {
d = 1;
++m;
}
}
else{
if(d == 29) {
d = 1;
++m;
}
}
}
}
void carryMonth(){
if(m==13){
m=1;
++y;
}
}
bool isLeapYear(){
return (y%4==0&&y%100!=0||y%400==0);
}
ll toLongLong(){
return (10000ll*y+100ll*m+d);
}
int Zeller(){
//0 是 星期日
if(y>1582||(y==1582&&(m>10||(m==10&&d>4))))
return Zeller1();
else
return Zeller2();
}
int Zeller1(){
int _c,_y=y,_m=m,_d=d;
if(_m<=2)
_m+=12,_y-=1;
_c=_y/100;
_y%=100;
return ((_y+_y/4+_c/4-2*_c+13*(_m+1)/5+_d-1)%7+7)%7;
}
int Zeller2(){
int _c,_y=y,_m=m,_d=d;
if(_m<=2)
_m+=12,_y-=1;
_c=_y/100;
_y%=100;
return ((_y+_y/4+_c/4-2*_c+13*(_m+1)/5+_d+2)%7+7)%7;
}
}date;
int main() {
#ifdef Yinku
freopen("Yinku.in", "r", stdin);
#endif // Yinku
date=Date(1500,1,1);
int cnt=0;
for(int i=1;i<=50000;++i){
cout<<date.toLongLong()<<" "<<date.Zeller()<<" ";
++cnt;
if(cnt==7){
cnt=0;
puts("");
}
date.nextDate();
}
//cout<<date.Zeller();
}