Pagini recente » Cod sursa (job #2085838) | Cod sursa (job #624101) | Cod sursa (job #788404) | Cod sursa (job #1389732) | Cod sursa (job #1515145)
#include <fstream>
#include <bitset>
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);
}
}
};
#define lint long long int
using namespace std;
const int NMAX = 100005;
const int VALMAX = 1000000;
int factor[VALMAX + 5];
int mobius[VALMAX + 5];
inline void erat () {
int j;
for (int i = 2; i <= VALMAX; ++ i)
if (!factor[i])
for (j = i; j <= VALMAX; j += i)
factor[j] = i;
mobius[1] = 1;
for (int i = 2; i <= VALMAX; ++ i)
if (factor[i] != factor[i / factor[i]])
mobius[i] = (-1) * mobius[i / factor[i]];
}
int frecv[VALMAX + 5];
int main()
{
InputReader cin("pairs.in");
ofstream cout("pairs.out");
erat();
int n = 0;
cin >> n;
int val;
for (int i = 1; i <= n; ++ i) {
cin >> val;
++ frecv[val];
}
int j;
for (int i = 1; i <= VALMAX; ++ i)
for (j = 2 * i; j <= VALMAX; j += i)
frecv[i] += frecv[j];
lint ans = 0;
for (int i = 1; i <= VALMAX; ++ i)
if (mobius[i] != 0)
ans += mobius[i] * (frecv[i] * (frecv[i] - 1ll)) / 2;
cout << ans << '\n';
//cin.close();
cout.close();
return 0;
}