Problemin müəllifi: | Kxoy Le |
Hazırlayan: | Kxoy Le |
Redaktə edən: | Həsən Saleh (MathModel) |
Qeyd: Lukas teoremi tək binomiyal əmsallar üçün sadə bir şərt təqdim edir.
Lukas teoremine görə, \binom{n}{k} \equiv 1 \pmod 2 yalnız və n-k-nın ikili sistemdə toplanması zamanı daşınmalar olmadıqda baş verir. Bu, k \text{ \& } (n-k) = 0 bit AND əməliyyatına bərabərdir, ya da daha sadə desək, k \text{ \& } n = k.
Gəlin kiçik dəyərlər üçün a_i, a_j \in \{1, 2, 3\} şərtini qiymətləndirək:
\binom{1}{1} = 1 (Tək)
\binom{2}{2} = 1 (Tək)
\binom{2}{1} = 2 (Cüt)
\binom{3}{3} = 1 (Tək)
\binom{3}{2} = 3 (Tək)
\binom{3}{1} = 3 (Tək)
Qeyd edin ki, yalnız dəyərini istifadə etdikdə, istənilən cütü -ya kömək edir. Lakin, və ya dəyərlərini daxil etdikdə, cütləri "sındıra" bilərik. Xüsusilə, dəyəri və ilə tək binomiyal əmsal yaradır. dəyəri yalnız digər və ya ilə tək əmsal yaradır. dəyəri yalnız digər və ya ilə tək əmsal yaradır. Vacibdir ki, cütü \binom{2}{1} = 2-yə səbəb olur ki, bu da cütdür.
Quruluş: Tam olaraq cütü əldə etmək üçün, ədəd dəyəri ilə başlayırıq, burada \binom{s}{2} \ge x. Bu, bizə \binom{s}{2} tək cüt verir. Bu sayı dəqiq -ə endirmək üçün, rem = \binom{s}{2} - x cütünü çıxarmalıyıq. Biz ədədini -dən -ə çevirə bilərik və ədədini -yə çevirə bilərik. Çünki cütü cütdür, tək -də olan ədədi ilə tək cüt yaratmayacaq, bu da ümumi sayı dəqiq qədər azaldır.
from collections import defaultdict as dd
def C(x): return (x*(x-1))//2
mp=dd(int)
for i in range(1,10**5):
mp[(i*(i-1))//2]=i
def solve():
x,y=map(int,input().split())
if(y<=1):
for i in range(1,int(2*(x**0.5))+2):
if(C(i)==x):
print(i)
print(*([1]*i))
return
if(y==2):
for c1 in range(1,10**5):
t = x - C(c1)
if(t >= 0 and mp[t]!=0):
c2=mp[t]
print(c1+c2)
print(*([1]*c1+[2]*(c2)))
return
if(y>0):
l,r=1,2*10**9
s=r
while(l<=r):
m=l+(r-l)//2
if((m*(m-1))//2>=x):
s=m
r=m-1
else:
l=m+1
rem=s*(s-1)//2-x
c1,c2,c3=0,0,0
if(rem==0):
c3=s
else:
c1=rem
c2=1
c3=s-c1-c2
print(int(c1+c2+c3))
print(*([1]*int(c1)+[2]*int(c2)+[3]*int(c3)))
return
for _ in range(int(input())):
solve()