65 lines
1.3 KiB
Python
65 lines
1.3 KiB
Python
# rare.py
|
|
# by xing216
|
|
|
|
import time as t
|
|
from functools import cache
|
|
|
|
@cache
|
|
def isSquare(n: int) ->bool:
|
|
if n < 0:
|
|
return False
|
|
if n == 0:
|
|
return True
|
|
while n&3 == 0:
|
|
n=n>>2
|
|
if n&7 != 1:
|
|
return False
|
|
if n==1:
|
|
return True
|
|
c = n%10
|
|
if c in {3, 7}:
|
|
return False
|
|
if n % 7 in {3, 5, 6}:
|
|
return False
|
|
if n % 9 in {2,3,5,6,8}:
|
|
return False
|
|
if n % 13 in {2,5,6,7,8,11}:
|
|
return False
|
|
if c == 5:
|
|
if (n//10)%10 != 2:
|
|
return False
|
|
if (n//100)%10 not in {0,2,6}:
|
|
return False
|
|
if (n//100)%10 == 6:
|
|
if (n//1000)%10 not in {0,5}:
|
|
return False
|
|
else:
|
|
if (n//10)%4 != 0:
|
|
return False
|
|
s = (len(str(n))-1) // 2
|
|
x = (10**s) * 4
|
|
A = {x, n}
|
|
while x * x != n:
|
|
x = (x + (n // x)) >> 1
|
|
if x in A:
|
|
return False
|
|
A.add(x)
|
|
return True
|
|
|
|
@cache
|
|
def main() -> None:
|
|
r = 1
|
|
start = t.time()
|
|
while True:
|
|
strr = str(r)
|
|
if int(strr[0]) % 2 != 0:
|
|
r += int('1' + (len(strr)-1)*'0' )
|
|
r1 = int(strr[::-1])
|
|
x = r + r1
|
|
y = r - r1
|
|
if isSquare(x) and isSquare(y) and r != r1:
|
|
print(f'success: {r} ~{t.time()-start}s')
|
|
r+=1
|
|
if __name__ == '__main__':
|
|
main()
|