Pagini recente » Cod sursa (job #1634180) | Cod sursa (job #2913935) | Cod sursa (job #11610) | Cod sursa (job #2306181)
#include <fstream>
using namespace std;
const int maxVal=1e6;
const int maxN=1e5+1;
int n;
int freq[maxVal+1];
int mobius[maxVal+1];
int nrOfPrimes[maxVal+1];
bool squareDiv[maxVal+1];
int main(){
ifstream cin("pairs.in");
ofstream cout("pairs.out");
cin>>n;
for(int i=1;i<=n;i++){
int x;
cin>>x;
freq[x]++;
}
for(int i=2;i<=maxVal;i++)
if(!nrOfPrimes[i]){
for(int j=i;j<=maxVal;j+=i){
nrOfPrimes[j]++;
if(i*i<=maxVal && j%(i*i)==0){
squareDiv[j]=true;
}
}
}
mobius[1]=1;
for(int i=2;i<=maxVal;i++){
if(!squareDiv[i]){
if(nrOfPrimes[i]%2){
mobius[i]=1;
} else {
mobius[i]=-1;
}
} else {
mobius[i]=0;
}
}
long long sol=0;
for(int i=1;i<=maxVal;i++)
if(mobius[i]){
for(int j=i+i;j<=maxVal;j+=i){
freq[i]+=freq[j];
}
long long cnt=freq[i]*(freq[i]-1)/2;
sol+=mobius[i]*cnt;
}
cout<<sol;
return 0;
}