Pagini recente » Cod sursa (job #2806757) | Cod sursa (job #2914358) | Cod sursa (job #566412) | Cod sursa (job #2662538) | Cod sursa (job #2228373)
#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;
}