Cod sursa(job #3250110)

Utilizator monica_LMonica monica_L Data 19 octombrie 2024 11:26:13
Problema Mins Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <fstream>
using namespace std;

ifstream f("mins.in");
ofstream g("mins.out");
int c,d,mn,mx,rez,i,j,k,fact,p,x,m,s,nrc, v[200001];

int main()
{

    f>>c>>d;
    c--; d--;

    mn=min(c,d); mx=max(c,d);
    rez=mx; // toate numerele sunt prime cu 1

    for(i=2;i<=mn;i++)
    {
        // se construieste vectorul cu factorii primi ai lui i (v cu m elem)
        x=i;
        m=0;
        fact=2;
        while (x>1)
        {
            if(x%fact==0)v[++m]=fact;
            while(x%fact==0) x=x/fact;
            fact++;
            if(fact*fact>x) fact=x;
        }

        s=mx; // s=nr. de numere prime cu i care sunt <= mx (scad din mx numerele neprime cu i)
        for(j=1; j < (1 << m); j++)
        {
            nrc = 0; // numarul de elemente din submultimea curenta
            p = 1; // produsul elementelor din submultimea curenta
            for(k = 0;k < m; k++)
              if(j & (1 << k))
                {
                    nrc++;
                    p = p * v[k + 1];
                }

            if(nrc % 2 == 1) s = s - mx / p;
            else rez = s + mx / p;
        }

        rez+=s;
    }

    g<<rez<<'\n';

    return 0;
}