Pagini recente » Cod sursa (job #3200911) | Cod sursa (job #1997999) | testcnam_oji | Cod sursa (job #2179667) | Cod sursa (job #210422)
Cod sursa(job #210422)
#include <fstream>
#include <bitset>
using namespace std;
ifstream f("pairs.in");
ofstream g("pairs.out");
const int NMAX=1000001;
int N,x[NMAX],Max;
long long sol,aux;
bitset<NMAX> P,D,R;
/*x[i]=nr de el ale multimii ce se divid prin i
P[i]=0 daca i este prim,1 altfel
D[i]=0 daca i are un numar par de divizori primi,1 altfel
R[i]=0 daca fiecare factor prim din desc lui i apare la puterea 1,1 altfel*/
int max(int A,int B){
return A>B?A:B;
}
int main(){
int i,j;
f>>N;
for (i=1,Max=0;i<=N;++i)
f>>j,x[j]=1,Max=max(Max,j);
sol=N*(N-1)/2;
for (i=2;i<=Max;++i){
for (j=2;j<=(Max/i);++j) x[i]+=x[i*j];
if (!P[i])
for (j=2,D[i]=1;j<=(Max/i);++j){
P[j*i]=1,D[j*i]=1-D[j*i];
if (j%i==0) R[j*i]=1;}
if (R[i]) continue;
aux=x[i]*(x[i]-1)/2;
if (!D[i]) sol+=aux;
else sol-=aux;
}
g<<sol;
return 0;
}