Pagini recente » Cod sursa (job #2920466) | Cod sursa (job #1281070) | Cod sursa (job #2450447) | Cod sursa (job #232349) | Cod sursa (job #1022439)
#include<fstream>
using namespace std;
#define max_n 1000100
ifstream f("pairs.in");
ofstream g("pairs.out");
int n , x , max_v , k , ok;
bool Fr[max_n] , V[max_n] , U[max_n];
int Prim[max_n] , Nr_p[max_n];
long long nr , prod;
void read(){
f>>n;
for( int i = 1 ; i <= n ; i++ ){
f>>x; Fr[x] = 1;
if( x > max_v )
max_v = x;
}
}
int main(){
read();
long long i , j;
for( i = 2 ; i <= max_v ; i++ ){
if( V[i] == 0 ){
Prim[++k] = i;ok = 1;
for( j = i ; j <= max_v ; j += i ){
V[j] = 1;
if( Fr[j] )
ok = 0;
Nr_p[j]++;
}
if(ok)
k--;
}
}
for( i = 1 ; i <= k ; i++ ){
for( j = ((long long)Prim[i])*Prim[i] ; j <= max_v ; j += ((long long)Prim[i])*Prim[i] )
U[j] = 1;
}
long long total = ((long long)n-1)*n/2;
for( i = 2 ; i <= max_v ; i++ ){
if( U[i] == 0 ){
nr = 0;
for( j = i ; j <= max_v ; j += i )
if(Fr[j])
nr++;
if( Nr_p[i] % 2 ){
total -= nr*(nr-1)/2;
}
else{
total += nr*(nr-1)/2;
}
}
}
g<<total;
return 0;
}