Pagini recente » Cod sursa (job #2060862) | Cod sursa (job #601522) | Cod sursa (job #776696) | Cod sursa (job #635412) | Cod sursa (job #547108)
Cod sursa(job #547108)
#include<stdio.h>
using namespace std;
typedef struct
{
long long val;
int nr;
long long inm;
} valori;
long long n;
short int k;
unsigned long long nr;
long long A[23];
valori B[22*22+1];
long int bacc = 0;
void citire(void)
{
long long a;
FILE *f = fopen("light2.in","r");
fscanf(f,"%lld",&n);
fscanf(f,"%d",&k);
for(int i=1;i<=k;i++)
{
fscanf(f,"%lld",&B[i].val);
B[i].nr = 1;
B[i].inm = 1;
}
bacc = k;
fclose(f);
}
int inc(int i,int j)
{
long int l;
for(l=1;l<=bacc && B[l].val != i*j;l++);
return l;
}
void calc(void)
{
FILE *f = fopen("light2.out","w");
nr = 0;
for(int i=1;i<=bacc;i++)
if(!(B[i].nr%2))
nr -= B[i].inm*(n/B[i].val);
else
nr += B[i].inm*(n/B[i].val);
fprintf(f,"%lld",nr);
fclose(f);
}
void prel(void)
{
long int l = 0;
long int i = 0;
long int j = 0;
long int nri = 0;
long int nrj = 0;
long int nr1;
int gata = 1;
bacc = k;
for(i=1;i<=k;i++)
for(j=1;j<=k;j++)
if(i!=j && !(B[i].val%B[j].val))
B[i].nr ++;
while(gata)
{
gata = 0;
nrj = bacc;
for(i=1;i<=nri;i++)
for(j=nri+1;j<=nrj;j++)
if(!(B[j].val%B[i].val))
B[j].nr ++;
for(i=1;i<=nrj;i++)
for(j=nri+1;j<=nrj;j++)
if(i!=j && B[i].val*B[j].val<=n && B[i].val%B[j].val && B[j].val%B[i].val)
{
if(inc(B[i].val,B[j].val)>bacc)
{
B[++bacc].val = B[i].val*B[j].val;
// B[bacc].nr = 1;
if(B[nri].inm < 2)
B[bacc].inm = 2;
else
B[bacc].inm = B[nri].inm*B[nri].inm;
gata ++;
}
}
nri = nrj;
}
}
int main()
{
citire();
prel();
calc();
for(int i=1;i<=bacc;i++)
printf("%7lld ",B[i].val);
printf("\n");
for(int i=1;i<=bacc;i++)
printf("%7d ",B[i].nr);
printf("\n");
for(int i=1;i<=bacc;i++)
printf("%7d ",B[i].inm);
return 0;
}