Cod sursa(job #2408454)

Utilizator FrostfireMagirescu Tudor Frostfire Data 17 aprilie 2019 23:12:34
Problema Indep Scor 25
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <fstream>
#include <iostream>

using namespace std;

ifstream f("indep.in");
ofstream g("indep.out");

int n, cn[1010], cp[1010], nrd[1010], maxi, a[510];
long long sol;

long long put(long long a, int n)
{
    if(!n) return 1;
    if(n & 1) return a * put(a*a, n/2);
    return put(a*a, n/2);
}

void ciur()
{
    for(int i=2; i<=maxi; i++)
        {   if(!cn[i])
                {   for(int j=i; j<=maxi; j+=i) cn[j]++;
                    int k = i * i;
                    for(int j=k; j<=maxi; j+=k) cp[j] = 1;
                }
            if(!cp[i])
                {   if(cn[i] & 1) sol = sol - (put(1LL * 2, nrd[i]) - 1);
                    else sol = sol + put(1LL * 2, nrd[i]) - 1;
                }
        }
}

int main()
{
    f >> n;
    sol = put(1LL * 2, n) - 1;
    for(int i=1; i<=n; i++) f >> a[i], maxi = max(maxi, a[i]);
    for(int i=1; i<=n; i++)
        {   for(int j=1; j<=a[i]/2; j++)
                if(a[i] % j == 0) nrd[j]++;
            nrd[a[i]]++;
        }


    ciur();
    g << sol << '\n';
    return 0;
}