Cod sursa(job #3266031)

Utilizator nistor_dora_valentinaNistor Dora Valentina nistor_dora_valentina Data 5 ianuarie 2025 14:30:30
Problema Pairs Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.49 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()
{
    fin>>n;
    ciur[0]=ciur[1]=1;
    for(i=2; i<=1e6; i++)
        if(ciur[i]==0)
        {
            prim.push_back(i);
            for(j=2*i; j<=1e6; j+=i)
                ciur[j]=1;
        }
    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=0; 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];
            }
        }
        for(j=1; j*j<cx; j++)
            if(cx%j==0)
        {
            fr[j]++;
            fr[cx/j]++;
        }
        if(j*j==cx)
            fr[j]++;
    }
    fout<<n*(n-1)/2-ans;
    return 0;
}