题意:计算给定时间内满足其月份为质数,日期为质数的天数。 思路:分多种情况。 #include<iostream> using namespace std; int sy,sm,sd,ey,em,ed; const int leapyear =53; const int year=52; int leapm[13]={0,0,10,11,0,11,0,11,0,0,0,10,0}; int m[13]={0,0,9,11,0,11,0,11,0,0,0,10,0}; bool a[32]={false,false,true,true,false,true,false,true,false,false,false,true,false,true,false,false,false,true,false,true,false,false,false,true,false,false,false,false,false,true,false ,true}; bool find(int a) { if(a%100!=0&&a%4==0) return true; if(a%400==0) return true; return false; } void solve() { int i,res=0; if(sy==ey)//年相等 { if(sm==em)//月相等 { if(m[sm]>0)//月为质数 for(i=sd;i<=ed;i++) if(a[i]) res++; } else { if(find(sy))//闰年 for(i=sm+1;i<em;i++) res+= leapm[i]; else for(i=sm+1;i<em;i++) res+=m[i]; if(sm==2) { if(find(sy)) { for(i=sd;i<=29;i++) if(a[i]) res++; } else { for(i=sd;i<29;i++) if(a[i]) res++; } } else if(sm==11) { for(i=sd;i<=30;i++) if(a[i]) res++;} else if(sm==3||sm==5||sm==7) { for(i=sd;i<=31;i++) if(a[i]) res++;} if(m[em]>0){for(i=1;i<=ed;i++) if(a[i]) res++;} } } else //年不相等 { for(i=sy+1;i<ey;i++) { if(find(i)) { res+=leapyear; } else res+=year; } for(i=sm+1;i<=12;i++) { if(find(sy)) res+=leapm[i]; else res+=m[i]; } for(i=1;i<em;i++) { if(find(ey)) res+=leapm[i]; else res+=m[i]; } if(sm==2) { if(find(sy)) for(i=sd;i<=29;i++) {if(a[i]) res++;} else for(i=sd;i<29;i++) if(a[i]) res++; } else if(sm==11) { for(i=sd;i<=30;i++) if(a[i]) res++;} else if(sm==3||sm==5||sm==7) { for(i=sd;i<=31;i++) if(a[i]) res++;} if(m[em]>0){for(i=1;i<=ed;i++) if(a[i]) res++;} } cout<<res<<endl; } void f() { int iy,im,id; iy=sy;im=sm;id=sd; sy=ey;sm=em;sd=ed; ey=iy;em=im;ed=id; } int main() { int t; cin>>t; while(t--) { cin>>sy>>sm>>sd>>ey>>em>>ed; if(sy>ey) f(); else if(sy==ey&&sm>em) f(); else if(sy==ey&&sm==em&&sd>ed) f(); solve(); } return 0; }