Pagini recente » Cod sursa (job #2150275) | Cod sursa (job #2221007) | Cod sursa (job #1780303) | Cod sursa (job #2542161) | Cod sursa (job #1701200)
#include<fstream>
using namespace std;
class InputReader {
public:
InputReader() {}
InputReader(const char *file_name) {
input_file = fopen(file_name, "r");
cursor = 0;
fread(buffer, SIZE, 1, input_file);
}
inline InputReader &operator >>(int &n) {
while(buffer[cursor] < '0' || buffer[cursor] > '9') {
advance();
}
n = 0;
while('0' <= buffer[cursor] && buffer[cursor] <= '9') {
n = n * 10 + buffer[cursor] - '0';
advance();
}
return *this;
}
private:
FILE *input_file;
static const int SIZE = 1 << 17;
int cursor;
char buffer[SIZE];
inline void advance() {
++ cursor;
if(cursor == SIZE) {
cursor = 0;
fread(buffer, SIZE, 1, input_file);
}
}
}f("pairs.in");
ofstream g("pairs.out");
int n,i,j,maxi,x,nr,d[1<<20];
long long sol;
bool v[1<<20];
int main()
{
f>>n;
sol=1LL*n*(n-1)/2;
for(i=1;i<=n;++i)
{
f>>x;
maxi=max(maxi,x);
v[x]=1;
}
for(i=2;i<=maxi;++i)
if(!d[i])
for(j=i;j<=maxi;j+=i) d[j]++;
for(i=2;i*i<=maxi;++i)
for(j=i*i;j<=maxi;j+=i*i) d[j]=-1;
for(i=2;i<=maxi;++i)
if(d[i]!=-1)
{
nr=0;
for(j=i;j<=maxi;j+=i)
if(v[j]) ++nr;
(d[i]&1)?sol-=1LL*nr*(nr-1)/2:sol+=1LL*nr*(nr-1)/2;
}
g<<sol<<'\n';
return 0;
}