Pagini recente » Cod sursa (job #3257574) | Cod sursa (job #1664247) | Cod sursa (job #64751) | Cod sursa (job #1026543) | Cod sursa (job #603440)
Cod sursa(job #603440)
#include <fstream.h>
long total=0;
void doi (long numar)
{
long i, aux, ptR=0, primul, doilea;
aux=numar;
while (aux)
{
aux/=2;
ptR+=aux;
}
if (numar & 1)
{
for (i=1; i<=numar/2; i++)
{
aux=i;
primul=0;
doilea=0;
while (aux)
{
aux/=2;
primul+=aux;
}
aux=numar-i;
while (aux)
{
aux/=2;
doilea+=aux;
}
if (ptR > primul+doilea) total+=2;
}
}
else
{
for (i=1; i<numar/2; i++)
{
aux=i;
primul=0;
while (aux)
{
aux/=2;
primul+=aux;
}
aux=numar-i;
doilea=0;
while (aux)
{
aux/=2;
doilea+=aux;
}
if (ptR > primul+doilea) total+=2;
}
primul=0;
aux=numar/2;
while (aux)
{
aux/=2;
primul+=aux;
}
if (ptR > 2*primul) total++;
}
}
void trei (long numar)
{
long i, aux, ptR=0, primul, doilea;
aux=numar;
while (aux)
{
aux/=3;
ptR+=aux;
}
if (numar & 1)
{
for (i=1; i<=numar/2; i++)
{
aux=i;
primul=0;
doilea=0;
while (aux)
{
aux/=3;
primul+=aux;
}
aux=numar-i;
while (aux)
{
aux/=3;
doilea+=aux;
}
if (ptR > primul+doilea) total+=2;
}
}
else
{
for (i=1; i<numar/2; i++)
{
aux=i;
primul=0;
doilea=0;
while (aux)
{
aux/=3;
primul+=aux;
}
aux=numar-i;
while (aux)
{
aux/=3;
doilea+=aux;
}
if (ptR > primul+doilea) total+=2;
}
primul=0;
aux=numar/2;
while (aux)
{
aux/=3;
primul+=aux;
}
if (ptR > 2*primul) total++;
}
}
void cinci (long numar)
{
long i, aux, ptR=0, primul, doilea;
aux=numar;
while (aux)
{
aux/=5;
ptR+=aux;
}
if (numar & 1)
{
for (i=1; i<=numar/2; i++)
{
aux=i;
primul=0;
doilea=0;
while (aux)
{
aux/=5;
primul+=aux;
}
aux=numar-i;
while (aux)
{
aux/=5;
doilea+=aux;
}
if (ptR > primul+doilea) total+=2;
}
}
else
{
for (i=1; i<numar/2; i++)
{
aux=i;
primul=0;
doilea=0;
while (aux)
{
aux/=5;
primul+=aux;
}
aux=numar-i;
while (aux)
{
aux/=5;
doilea+=aux;
}
if (ptR > primul+doilea) total+=2;
}
primul=0;
aux=numar/2;
while (aux)
{
aux/=5;
primul+=aux;
}
if (ptR > 2*primul) total++;
}
}
void patru (long numar)
{
long i, aux, ptR=0, primul, doilea;
aux=numar;
while (aux)
{
aux/=2;
ptR+=aux;
}
if (numar & 1)
{
for (i=1; i<=numar/2; i++)
{
aux=i;
primul=0;
doilea=0;
while (aux)
{
aux/=2;
primul+=aux;
}
aux=numar-i;
while (aux)
{
aux/=2;
doilea+=aux;
}
if (ptR > primul+doilea+1) total+=2;
}
}
else
{
for (i=1; i<numar/2; i++)
{
aux=i;
primul=0;
doilea=0;
while (aux)
{
aux/=2;
primul+=aux;
}
aux=numar-i;
while (aux)
{
aux/=2;
doilea+=aux;
}
if (ptR > primul+doilea+1) total+=2;
}
primul=0;
aux=numar/2;
while (aux)
{
aux/=2;
primul+=aux;
}
if (ptR > 2*primul+1) total++;
}
}
void sase (long numar)
{
long i, aux, ptR=0, ptR2=0, primul, doilea, primul2, doilea2;
aux=numar;
while (aux)
{
aux/=2;
ptR+=aux;
}
aux=numar;
while (aux)
{
aux/=3;
ptR2+=aux;
}
if (numar & 1)
{
for (i=1; i<=numar/2; i++)
{
aux=i;
primul=0;
doilea=0;
primul2=0;
doilea2=0;
while (aux)
{
aux/=2;
primul+=aux;
}
aux=i;
while (aux)
{
aux/=3;
primul2=aux;
}
aux=numar-i;
while (aux)
{
aux/=2;
doilea+=aux;
}
aux=numar-i;
while (aux)
{
aux/=3;
doilea2+=aux;
}
if ((ptR > primul+doilea) && (ptR2 > primul2+doilea2)) total+=2;
}
}
else
{
for (i=1; i<numar/2; i++)
{
aux=i;
primul=0;
primul2=0;
doilea=0;
doilea2=0;
while (aux)
{
aux/=2;
primul+=aux;
}
aux=i;
while (aux)
{
aux/=3;
primul2+=aux;
}
aux=numar-i;
while (aux)
{
aux/=2;
doilea+=aux;
}
aux=numar-i;
while (aux)
{
aux/=3;
doilea2+=aux;
}
if ((ptR > primul+doilea) && (ptR2 > primul2+doilea2)) total+=2;
}
primul=0;
aux=numar/2;
while (aux)
{
aux/=2;
primul+=aux;
}
primul2=0;
aux=numar/2;
while (aux)
{
aux/=3;
primul2+=aux;
}
if ((ptR > 2*primul) && (ptR2 > 2*primul2)) total++;
}
}
int main()
{
long primu1, primu2, doilea1, doilea2, R;
int D;
ifstream fin;
fin.open ("pascal.in");
fin>>R>>D;
fin.close();
if (D == 6) sase (R);
else
{
if (D == 5) cinci (R);
else
{
if (D == 4) patru (R);
else
{
if (D == 3) trei (R);
else doi (R);
}
}
}
ofstream fout;
fout.open ("pascal.out");
fout<<total;
fout.close();
return 0;
}