|
发表于 2023-9-26 21:43:15
|
显示全部楼层
- Clear["Global`*"];(*Clear all variables*)(*生成生日素数的所有可能,从1900年开始到2023年,day必然是奇数,需要删选掉部分不存在的日期*)aaa=Table[year*10000+month*100+day,{year,1900,2023},{month,1,12},{day,1,31,2}];bbb=Flatten@aaa;(*压平,成一个列表*)ccc=Select[bbb,PrimeQ[#]&];(*选出所有的素数*)(*子函数,判别8位日期(比如19010203)是否是正确日期,正确返回1,错误返回0*)fun[n_]:=Module[{lst,year,month,day,leap}, lst=IntegerDigits[n,10];(*十进制下每位上的数字*) year=FromDigits[lst[[1;;4]]];(*得到年*) month=FromDigits[lst[[5;;6]]];(*得到月*) day=FromDigits[lst[[7;;8]]];(*得到日*) If[MemberQ[{1,3,5,7,8,10,12},month]&&(1<=day<=31),Return[1]];(*大月天数不超过31*) If[MemberQ[{4,6,9,11},month]&&(1<=day<=30),Return[1]];(*平月天数不超过30*) leap=0;(*是否润年,0不是,1是闰年*) If[(Mod[year,4]==0&&Mod[year,100]!=0)||(Mod[year,400]==0),leap=1];(*判别闰年*) If[(month==2)&&Or[leap==0&&(1<=day<=28),leap==1&&(1<=day<=29)],Return[1]];(*二月情况判别*) Return[0](*其余情况一概返回错误0*)]ddd=Select[ccc,fun[#]==1&];(*从这些素数中选择日期正确的日期*)
复制代码
最后结果2770个正确的日期都是素数 |
|