Fişierul intrare/ieşire:jupanul.in, jupanul.outSursăJunior Challenge 2023
AutorCozma Tiberiu StefanAdăugată decadmium_Voicu Mihai Valeriu cadmium_
Timp execuţie pe test4 secLimită de memorie524288 kbytes
Scorul tăuN/ADificultateN/A

Vezi solutiile trimise | Statistici

Salutare Jupâne

I-a luat Jupânului 4653 de zile să cureţe Londra de mafioţi. I-a ramas doar unul, anume burghezul metabalzacian Stănică Raţiu. De aceea Jupanul a venit în Bucuresti, pentru a-şi îndeplini odată pentru totdeauna ţelul.

Cerinţă

Pentru un şir de numere a, definim costul ca fiind suma gcd-urilor tututor prefixelor lui a. De exemplu, costul şirului [12, 6, 9, 2] este gcd(12) + gcd(12, 6) + gcd(12, 6, 9) + gcd(12, 6, 9, 2) = 12 + 6 + 3 + 1 = 22.

Definim f(n,k) ca fiind suma costurilor tuturor partiţiilor lui n în k termeni.

Dându-se n şi m, şi un şir k1, k2, ..., km, voi trebuie să calculaţi f(n, k1), f(n, k2),..., f(n, km). Cum aceste numere pot fi foarte mari, Jupânul vă roagă să le afişaţi modulo 998244353.

Prin gcd(a1, a2,..., ai) s-a notat cel mai mare divizor comun al numerelor a1, a2,..., ai.
Prin o partiţie a lui n în k termeni, înţelegem un şir de numere pozitive a1, a2,..., ak cu proprietatea că a1 · a2· ... · ak=n

Date de intrare

Prima linie a fişierului jupanul.în conţine numerele n şi m separate printr-un spaţiu. Pe a doua linie, se vor afla m numere k1, k2, ..., km.

Date de ieşire

Pe prima şi singura linie a fişierului jupanul.out se vor afla resturile modulo 998244353 ale numerelor f(n, k1), f(n, k2),..., f(n, km) separate prin exact un spaţiu.

Restricţii

Subtaskuri

  • Subtask Eşti un om norocos, Gavrilescule! - 11 puncte (testele 1-2): n ≤ 5 000, m ≤ 80 000, ki ≤ 100 000
  • Subtask Câtă luciditate atâta dramă - 12 puncte (testele 3-4): n ≤ 100 000, m ≤ 80 000, ki ≤ 100 000
  • Subtask Dă-mi nopţile înapoi - 10 puncte (testele 5-6): n ≤ 1 000 000, m ≤ 80 000, ki ≤ 100 000
  • Subtask Aici ar trebui să intre doar AIB - 24 puncte (testele 7-10): m ≤ 500, ki ≤ 200 000
  • Subtask Du-te, dar nu mă vei uita - 42 puncte (testele 11-15): m ≤ 80 000, ki ≤ 200 000
  • Subtask Şi veşnicia chiar în dar s-o primim - 1 punct (testul 16): Fără restricţii suplimentare

Exemplu

jupanul.injupanul.out
6 2
1 2
6 16
12152 8
1 2 3 4 5 6 7 8
12152 27468 57294 111704 207030 369846 642894 1093344

Explicaţie

Numărul 6 se descompune în 2 termeni astfel:

  • [1, 6], cost = gcd([1]) + gcd([1, 6]) = 1 + 1 = 2
  • [6, 1], cost = gcd([6]) + gcd([6, 1]) = 6 + 1 = 7
  • [2, 3], cost = gcd([2]) + gcd([2, 3]) = 2 + 1 = 3
  • [3, 2], cost = gcd([3]) + gcd([3, 2]) = 3 + 1 = 4

Deci f(6, 2) = 2 + 7 + 3 + 4 = 16.

Trebuie sa te autentifici pentru a trimite solutii. Click aici

Cum se trimit solutii?