Fişierul intrare/ieşire:present.in, present.outSursăRMI 2021
AutorTamio-Vesa NakajimaAdăugată detamionvTamio Vesa Nakajima tamionv
Timp execuţie pe test0.5 secLimită de memorie256000 kbytes
Scorul tăuN/ADificultateN/A

Vezi solutiile trimise | Statistici

Present

Laika a decis să îi facă un cadou prietenei ei Azusa, vrăjitoarea din munţi. Din motive pe care nu le cunoaştem, cadoul va fi o mulţime finită de numere întregi pozitive. Ar fi o chestiune simplă să alegi un cadou, dar mai mulţi factori complică această sarcină.

În primul rând, duşmanul lui Laika, Flatorte, are puteri magice misterioase: dându-se două numere întregi x şi y ea poate crea cel mai mare divizor comun al lui x şi y (i.e. gcd(x, y)). Dacă Laika oferă un cadou în care Flatorte ar putea să adauge măcar un element (i.e. dacă oferă mulţimea A pentru care x, y apartin lui A, dar gcd(x, y) nu apartine lui A), atunci Flatorte poate imediat să îşi tachineze rivalul. Din aceste motive, cadoul lui Laika nu trebuie să poată fi îmbunătăţit cu ajutorul puterilor lui Flatorte: dacă ea oferă mulţimea A atunci pentru orice x, y ce apartin lui A trebuie să fie satisfăcută condiţia că gcd(x, y) apartine lui A.

În al doilea rând, Laika vrea ca cadoul ei să aibă o semnificaţie specială. Au trecut exact K zile de când a cunoscut-o pe Azusa şi ea vrea ca cadoul să indice acest lucru. De aceea Laika a aranjat toate mulţimile care satisfac condiţia explicată mai sus în ordine Laikană (explicată mai jos), obţinând astfel un şir infinit de mulţimi finite S0, S1, .... Ea vrea să selecteze ca cadou mulţimea SK. Puteţi să o ajutaţi să îndeplinească această sarcină?

Ordine Laikană. Selectăm două mulţimi A şi B. Atunci, A apare înaintea lui B în ordinea Laikană dacă şi numai dacă max A < max B, sau max A = max B şi A - { max A } apare înaintea lui B - { max B } în ordinea Laikană. În scopul acestei definiţii, fie max {} = -infinit. Observaţi că această ordine este întotdeauna bine definită pentru mulţimi finite de numere întregi pozitive.

Date de intrare

Prima linie de input conţine un număr întreg T-numărul de teste. Fiecare din următoarele T linii conţin o valoare K pentru care noi vrem să aflăm SK.

Date de ieşire

Pentru fiecare T valori a lui K, afişaţi mulţimea SK. Pentru a afişa o mulţime, afişaţi o linie care începe cu numărul de elemente a mulţimii, iar apoi elementele acesteia, în ordine crescătoare.

Restrictii

  • 1 ≤ T ≤ 5
  • Pentru 18 puncte, 0 ≤ K ≤ 100.
  • Pentru alte 18 puncte, 0 ≤ K ≤ 1 000 000.
  • Pentru alte 18 puncte, 0 ≤ K ≤ 500 000 000.
  • Pentru alte 18 puncte, 0 ≤ K ≤ 1000 000 000.
  • Pentru restul punctelor, 0 ≤ K ≤ 1500 000 000.

Exemple

present.inpresent.out
5
0
1
2
3
4
0
1 1
1 2
2 1 2
1 3
4
5
6
100
1000
2 1 3
3 1 2 3
5 1 2 3 7 8
7 1 2 3 5 10 11 12

Explicatii

Observaţi că S0 = {}, S1 = {1}, S2 = {2}, S3 = {1, 2}, S4 = {3}, S5 = {1, 3}, S6 = {1, 2, 3}, S100 = {1, 2, 3, 7, 8}, S1000 = {1, 2, 3, 5, 10, 11, 12}. Acestea sunt exact mulţimile afişate în exemplu (împreună cu mărimile lor). Observaţi că S6 != {2, 3}, deaorece 2, 3 apartin lui {2, 3}, dar gcd(2, 3) = 1 ce nu apartine lui {2, 3}.

Trebuie sa te autentifici pentru a trimite solutii. Click aici

Cum se trimit solutii?