Pagini recente » Cod sursa (job #389088) | Cod sursa (job #1405135) | Cod sursa (job #2498801) | Cod sursa (job #2957781) | Cod sursa (job #387121)
Cod sursa(job #387121)
#include<fstream>
#include<algorithm>
using namespace std;
ofstream fout("suman.out");
long long v[25],n,kk,x[25];
long long r=0;
long long cats(long long div)//calculeaza suma multiplilor de div a elementelor din intervalul [1,n]
{
long long rez=div*(((n/div)*(n/div+1))/2);
return rez;
}
void afis(long long j)
{
long long q=1;
long long semn=-1;
if(j%2==1)
semn=1;
long long z=v[x[1]];
if(j>1)
for(long long i=2;i<=j;i++)
{
long long aa=z,a=z,b=v[x[i]],bb=v[x[i]];
while(a!=b)
if(a<b)
b=b-a;
else
a=a-b;
z=aa*bb/a;
}
q=z;
r+=semn*cats(q);
}
void back(long long k,long long j)
{
long long i;
for(i=x[k-1]+1;i<=kk;i++)
{
x[k]=i;
if(k==j)
{
afis(j);
}
else
back(k+1,j);
}
}
void scoatemultipli()
{
int i,j,l;
for(i=1;i<kk;i++)
{
for(j=i+1;j<=kk;j++)
if(v[j]%v[i]==0)
{
for(l=j;l<kk;l++)
v[l]=v[l+1];
kk--;
}
}
}
void afis()
{
int i;
fout<<n<<" "<<kk<<endl;
for(i=1;i<=kk;i++)
fout<<v[i]<<" ";
fout<<endl;
fout.flush();
}
int main()
{
ifstream fin("suman.in");
fin>>n>>kk;
long long i;
for(i=1;i<=kk;i++)
fin>>v[i];
sort(v+1,v+kk+1);
for(i=1;i<=kk;i++)
scoatemultipli();
for(i=1;i<=kk;i++)
{
back(1,i);
}
fout<<r;
return 0;
}