Cod sursa(job #3237216)

Utilizator luca._.solosluca solos luca._.solos Data 7 iulie 2024 11:01:37
Problema Mins Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <bits/stdc++.h>

using namespace std;

const int nmax=5003;

vector <int> prim;
vector <int> fac[nmax];
int lp[nmax];

bool coprim(int a, int b)
{
    for(auto i:fac[a])
    {
        for(auto j:fac[b])
        {
            if(i==j)
            {
                return false;
            }
        }
    }
    return true;
}

int main()
{
    int n, m, ans=0;
    cin>>n>>m;
    n--;
    m--;
    int mx=max(n, m);
    for(int i=2; i<=mx; i++)
    {
        if(lp[i]==0)
        {
            prim.push_back(i);
            lp[i]=i;
        }
        for(int j=0; i*prim[j]<=mx; j++)
        {
            assert(prim[j]*i);
            assert(j<prim.size());
            lp[prim[j]*i]=prim[j];
            if(prim[j]==lp[i])
                break;
        }
    }
    for(int i=1; i<=mx; i++)
    {
        int ci=i;
        while(ci!=1)
        {
            if(fac[ci].empty() || fac[ci].back()!=lp[ci])
            {
                fac[ci].push_back(lp[ci]);
            }
            ci/=lp[ci];
        }
    }
    for(int i=1; i<=n; i++)
    {
        //cout<<i<<' ';
        for(int j=i; j<=m; j++)
        {
            ans+=coprim(i, j)*(i!=j ? 2:1);
        }
    }
//    for(int i=2; i<=mx; i++)
//        cout<<lp[i]<<' ';
    cout<<ans;

    return 0;
}