import math def Rech1(N, Q1): R1 = [0] dxy1 = N % Q1 a1 = 1 while a1 < Q1: b1 = a1 while b1 < Q1: M1 = a1 * b1 #print(a1,b1) m1 = M1 % (Q1) if m1 == dxy1: #print("-1-",M1, m1, a1, b1) R1.append(a1) R1.append(b1) R1[0] +=2 if a1 != b1: R1.append(b1) R1.append(a1) R1[0] +=2 b1 +=2 a1 +=2 return R1 def Rech2(N, Q1,Q2,Q3, R1): R2 = [0] dxy2 = N % Q3 #print(Q2, Q3, dxy2) rn = R1[0]//2 r = 1 while r <= rn: a1 = R1[r*2-1] b1= R1[r*2] #print(a1,b1) a2 = 0 while a2 < Q1: b2 = a2 while b2 < Q1: c2 = a2*Q2 + a1 d2 = b2*Q2 + b1 cd2 = (c2 + d2) % Q3 M2 = c2 * d2 m2 = M2 % (Q3) if m2 == dxy2: #print("-2-",M2, m2, c2, d2 ) R2.append(c2) R2.append(d2) R2[0] +=2 if c2 != d2: R2.append(d2) R2.append(c2) R2[0] +=2 b2 +=1 a2 +=1 r +=1 return R2 def Ransh(R2,Q2): n = R2[0]//2 R=[0]*(Q2+2) r = 1 while r <= n: a1 = R2[r*2-1] b1= R2[r*2] ab = (a1 + b1) % Q2 R[ab] +=1 r +=1 Rr =[0] r = 1 while r <= Q2: if R[r] > 0: Rr.append(r) Rr[0] +=1 r +=1 return Rr Q1 = 10 x = 563 y = 821 N = x * y xy = x + y xy1 = xy % Q1 xy2 = xy % (Q1*Q1) xy3 = xy % (Q1*Q1*Q1) xy4 = xy % (Q1*Q1*Q1*Q1) N1 = N % Q1 N2 = N %(Q1*Q1) print(N,N1,N2, xy1, xy2, xy3, xy4) n = 11 Sim = [0]* (n) #for i in range(n): #print ( i, Sim[i]) print(Sim) R1 = [] R1 = Rech1(N,Q1) print(R1) Rr1 =[] Rr1 = Ransh(R1, Q1) print(Rr1) Q11 = Q1 z = 1 Z = 2 while z <=Z: Q2 = Q11*Q1 #print (z, Q11, Q1, Q2) R2 = [] R2 = Rech2(N,Q1,Q11,Q2,R1) print(R2[0]) r = R2[0] R1 =[r] #print(r) r1 = 1 while r1 <= r: r2 = R2[r1] R1.append( r2) r1 +=1 Rr1 =[] #print(R1[0]) Rr1 = Ransh(R1, Q2) print(Rr1[0]) print(Rr1) Q11 = Q2 #print R1 z +=1
Standard input is empty
(462223, 3, 23, 4, 84, 384, 1384) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] [8, 1, 3, 3, 1, 7, 9, 9, 7] [2, 4, 6] 96 10 [10, 4, 16, 24, 36, 44, 56, 64, 76, 84, 96] 1056 50 [50, 16, 24, 56, 64, 96, 104, 136, 144, 176, 184, 216, 224, 256, 264, 296, 304, 336, 344, 376, 384, 416, 424, 456, 464, 496, 504, 536, 544, 576, 584, 616, 624, 656, 664, 696, 704, 736, 744, 776, 784, 816, 824, 856, 864, 896, 904, 936, 944, 976, 984]