从数学导入gcd从itertools导入计数#求解线性合流ax≡b(mod n)。#解决方案作为元组(c,m)返回,#意思是ax≡b(modn)当且仅当x≡c(modm)。#如果不存在解决方案,则返回None。定义溶剂同余(a,b,n):d=gcd(a,n)if(b%d!=0):返回无a、 b,n=a//d,b//d,n//d返回(b*pow(a,-1,n)%n,n)#返回以b为底的最小d位回文#与a(模n)同余,如果不存在这样的回文,则为None。def-least_d_digit_palindrome(d,a,n,b=10,allow_leading_zeros=False):a%=nif(d==0):如果a==0,则返回0,否则无if(d==1):返回next((i代表范围内的i(1-allow_leading_zeros,b)如果i%n==a),则返回None)对于范围(1-allow_leading_zeros,b)中的i:t=溶剂同余(b,a-i-i*b**(d-1),n)如果t不是None:x=最小d_digit_palindrome(d-2,t[0],t[1],b,真)如果x不是None:返回i*b**(d-1)+x*b+ireturn无#返回以b为底的最小正回文#与a(模n)同余,如果不存在这样的回文,则为0。定义最小回文(a,n,b=10):if(a%b==n%b==0):返回0对于计数(1)中的d:结果=least_digit_palindrome(d,a,n,b)如果结果不是None:返回结果打印(“0 0”)对于范围(18181)内的n:打印(n,最小回文(0,n))