Pagini recente » Istoria paginii runda/simulare-cartita-11/clasament | Cod sursa (job #1297731) | Monitorul de evaluare | Cod sursa (job #1444543) | Cod sursa (job #2870976)
#include <bits/stdc++.h>
#define nmax 100005
#define nrmax 1000005
#define sqrtmax 1005
using namespace std;
ifstream in("pairs.in");
ofstream out("pairs.out");
bool ciur[sqrtmax];
vector<int> prime;
int f[nrmax];
void dociur()
{
prime.push_back(2);
for(int i=3;i<=sqrtmax;i+=2)
{
if(!ciur[i])
{
prime.push_back(i);
for(int j=i*i;j<=sqrtmax;j+=i)ciur[j]=1;
}
}
}
int fact(int sum,int num)
{
for(auto i:prime)
{
if(num%i==0)
{
sum-=f[i];
f[i]++;
while(num%i==0)
{
num/=i;
}
}
}
if(num!=1)
{
sum-=f[num];
f[num]++;
}
return sum;
}
int main()
{
dociur();
int n;
in>>n;
uint64_t res=0;
for(int i=0;i<n;i++)
{
int nr;
in>>nr;
res+=fact(i,nr);
}
out<<res;
}