导入时间导入numpy从gmpy2导入is_squaredef校对和计数():如果是平方(第2-y4项):全局计数器计数器+=1全局字符串字符串term+=(str(term)+“^2=”+str(int((term2-y4)**0.5)).rjust(11)+“^2+”+字符串(int(y4**0.25)).rjust(9)+“^4解决方案”+str(计数器)+“\n”)timestart=time.time()#█████████████ Main参数██████████████████████████████#██开始=1#ммhowfar=1000000#1000000应该约为3分钟#██解决方案to_screen=[3、4、5、6、7、8、9、10、11、12]#мм#██#██████████████████████████████████████████████████████████yyyy=(numpy.arange(0,int(pow(howfar*howfar,0.25))+1,dtype=对象))**4对于范围内的术语(开始,howfar+1):term2=术语*术语计数器=0字符串term=“”如果is_square(term):ylimit=int(term**0.5)否则:ylimit=int(术语**0.5)+1if term2%24==1:#关于加速代码的一些想法:对于yyyy[1:ylimit]中的y4:proofandcounting()#y^4 mod 24(z^2只能是[0,1,4,9,12,16]mod 24)# |elif term2%24英寸[4,16]:#16|16(17)(20)1 4(8)对于yyyy中的y4[2:ylimit][::2]:proofandcounting()#9|9(10)(13)(18)(21)1# 1 | 1 ( 2) ( 5) (10) (13) (17) elif term2%24==9:#0|0 1 4 9 12 16对于yyyy中的y4[3:ylimit][::3]:proofandcounting()#---+---------------------------->x^2 mod 24# | 0 1 4 9 12 16 else:#(=如果term2%24 in[0,12]:)对于yyyy[6:ylimit][::6]中的y4:proofandcounting()#由于x^2+y^4是一个加法,我们也可以添加残数mod 24。#因此,我们只需在非括号范围内进行搜索。如果计数器>0:#(素数^2总是有1模24,对于所有素数>=5)f=打开(str(计数器)+“_Solutions.txt”,“a”)如果计数器==1:f.write(字符串期限)如果计数器>1:f.write(字符串+“\n”)f.关闭()解决方案to_screen中的if计数器:打印(字符串项)打印(“Time=%3.3f”%(Time.Time()-timestart))