Cod sursa(job #3266044)

Utilizator nistor_dora_valentinaNistor Dora Valentina nistor_dora_valentina Data 5 ianuarie 2025 14:54:18
Problema Pairs Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.45 kb
#include <fstream>
#include <vector>

using namespace std;
ifstream fin("pairs.in");
ofstream fout("pairs.out");
int n, x, i, divi[1000005], j, maxim, fr[1000005], ciur[1000005];
vector <int> prim;
long long ans;
int main()
{
    ios_base::sync_with_stdio(false);
    fin.tie(NULL);
    fin>>n;
    ciur[0]=ciur[1]=1;
    for(i=2; i*i<=1e6; i++)
        if(ciur[i]==0)
        {
            for(j=i*i; j<=1e6; j+=i)
                ciur[j]=1;
        }
    for(i=2; i<=1e6; i++)
        if(!ciur[i])
          prim.push_back(i);
    for(i=1; i<=n; i++)
    {
        fin>>x;
        int cx=x;
        int d=prim[0], k=0;
        vector <int> frp;
        while(x>1)
        {
            if(x%d==0)
            {
                frp.push_back(d);
                while(x%d==0)
                    x/=d;
            }
            k++;
            d=prim[k];
            if(prim[k]*prim[k]>x && x>1)
                d=prim[k];
        }
        k=frp.size();
        for(int mask=1; mask<(1<<k); mask++)
        {
            int nr=0, pr=1;
            for(j=0; j<k; j++)
                if(mask&(1<<j))
            {
                nr++;
                pr*=frp[j];
            }
            if(nr!=0)
            {
                if(nr%2)
                    ans+=fr[pr];
                else
                    ans-=fr[pr];
            }
            fr[pr]++;
        }
    }
    fout<<n*(n-1)/2-ans;
    return 0;
}