Basme

Time limit: 0.5s Memory limit: 64MB Input: basme.in Output: basme.out

Xorin se plimba pe stradă când a dat peste un șir uu de NN numere naturale. Curios din fire, acesta vrea să aplice operații alchimice fiecărui element din șir. Singura operație alchimică știută de el este "solve et coagula" (dizolvă și coagulează), învățată dintr-un eseu despre Harap Alb. Procedeul "solve et coagula" este următorul: se ia un număr natural, de exemplu 8484, se descompune în factori primi (84=223784 = 2^2 \cdot 3 \cdot 7), iar rezultatul se obține din suma xor a acestor factori primi, luați o singură dată (237=62 \oplus 3 \oplus 7 = 6).

Xorin aplică procedeul "solve et coagula" fiecărui element din șirul uu, obținând un nou șir vv (elementului uiu_i îi corespunde elementul viv_i).

Cerință

Roxana găsește noul șir vv și vă adresează o întrebare: câte perechi de indici (a,b)(a, b), unde 1abN1 \leq a \leq b \leq N, există, cu proprietatea că suma xor a elementelor viv_i, cu aiba \leq i \leq b, este 00?

Date de intrare

Prima linie conține numărul natural NN. A doua linie conține NN numere naturale, elementele șirului inițial uu.

Date de ieșire

Fișierul de ieșire va conține pe prima linie numărul de perechi de indici (a,b)( a, b ), cu proprietatea specificată anterior.

Restricții și precizări

  • 1N200 0001 \leq N \leq 200 \ 000
  • 2uiV2 \leq u_i \leq V, oricare ar fi 1iN1 \leq i \leq N.
  • 1V10 000 0001 \leq V \leq 10 \ 000 \ 000
  • Aplicarea procedeului pentru valoarea 11 va da ca rezultat 00.
  • Pentru teste în valoare de 2121 puncte, N1 000N \leq 1 \ 000 și V1 000 000V \leq 1 \ 000 \ 000.
  • Pentru teste în valoare de 3939 de puncte, N40 000N \leq 40 \ 000 și V10 000 000V \leq 10 \ 000 \ 000.
  • Pentru teste în valoare de 1717 puncte, N200 000N \leq 200 \ 000 și V10 000 000V \leq 10 \ 000 \ 000 și toate numerele sunt prime.
  • Pentru teste în valoare de 2323 de puncte, nu există restricții suplimentare.
  • Operaţia xor reprezintă operaţia de disjuncţie exclusivă. Tabelul de mai jos reprezintă tabelul acestei operatii, pentru 2 biţi.
  • În cazul acestei probleme, operaţia xor se realizează pe biţii operanzilor. De exemplu, 512=95 \oplus 12 = 9 (0101211002=100120101_2 \oplus 1100_2 = 1001_2).
  • Prin suma xor a nn numere xix_i, se înțelege rezultatul obținut prin aplicarea succesivă a operației xor între acestea: x1x2xn1xnx_1 \oplus x_2 \oplus \dots \oplus x_{n−1} \oplus x_n.
  • În C/C++, operatorul pentru xor este ^, iar în Pascal, operatorul corespunzător este xor.
AA BB ABA \oplus B
00 00 00
00 11 11
11 00 11
11 11 00

Exemplul 1

basme.in

3
236 23 410

basme.out

1

Explicație

u1=236u_1 = 236 are factorii primi 22 și 5959, deci v1=259=57v_1 = 2 \oplus 59 = 57. u2=23u_2 = 23 este prim, deci v2=23v_2 = 23. u3=410=4125u_3 = 410 = 41 \cdot 2 \cdot 5, deci v3=4125=46v_3 = 41 \oplus 2 \oplus 5 = 46. Astfel, șirul vv este [57,23,46][57, 23, 46]. Singura subsecvență continuă care are suma xor 00 este [57,23,46][57, 23, 46], deci răspunsul este 11.

Exemplul 2

basme.in

10
84 4 5 6 10 225 2 13 15 26

basme.out

3

Explicație

Șirul inițial uu se transformă în următorul șir vv: [6,2,5,1,7,6,2,13,6,15][6, 2, 5, 1, 7, 6, 2, 13, 6, 15]. Subsecvențele [6,2,5,1][6, 2, 5, 1], [5,1,7,6][ 5, 1, 7, 6 ] și [7,6,2,13,6,15][7, 6, 2, 13, 6, 15] au suma xor 00. Astfel, pentru acest șir, sunt 33 perechi de indici care respectă proprietatea cerută: (1,4)(1, 4), (3,6)(3, 6) și (5,10)(5, 10).

Log in or sign up to be able to send submissions!