Cod sursa(job #2228373)

Utilizator patcasrarespatcas rares danut patcasrares Data 3 august 2018 14:43:21
Problema Lacate Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include<fstream>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<queue>
#define DN 35
#define DM (1<<20)+5
using namespace std;
ifstream fin("suman.in");
ofstream fout("suman.out");
long long n,k,a[DN],p,f,g,dp[DM];
long long rez;
long long cmmdc(long long a,long long b)
{
    long long c;
    while(b)
    {
        c=a%b;
        a=b;
        b=c;
    }
    return a;
}
long long ve(long long a,long long b)
{
    if(a>n||a==0)
        return 0;
    return (a*b)/cmmdc(a,b);
}
long long ve2(long long a,long long n)
{
    n=(n*(n+1))/2;
    return a*n;
}
int main()
{
    fin>>n>>k;
    for(int i=1;i<=k;i++)
        fin>>a[i];
    p=(1<<k);
    dp[0]=1;
    for(int i=1;i<p;i++)
    {
        f=0;
        g=-1;
        for(int j=1;j<=k;j++)
            if((i&(1<<(j-1))))
            {
                if(!dp[i])
                    f=dp[i]=ve(dp[(i^(1<<(j-1)))],a[j]);
                g=-g;
            }
        if(f==0)
            continue;
        f=ve2(f,n/f);
        rez=rez+f*g;
    }
    fout<<rez;
}