Cod sursa(job #81301)

Utilizator ScrazyRobert Szasz Scrazy Data 1 septembrie 2007 10:51:04
Problema Pascal Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.36 kb
#include <stdio.h>

long r, p1, p2 ,p, s1, s2, z; 
int c;

long faktor(long r, int d)
{
    long x=0, y=0;
    while (y=r=r/d) x+=y;
    return x;
} 

int main()
{
    freopen("pascal.in","r",stdin);
    freopen("pascal.out","w",stdout);

    scanf("%ld %d", &r, &c);

    long i,o;

    o=0;

    if (c==2 || c==3 || c==5)
    { 
	p=faktor(r,c);
	z=(r+1)/2-1;
	for (i=1; i<=z; ++i)
	{
	    p1=faktor(r-i,c);
	    p2=faktor(i,c);
	    if (p1+p2 < p) ++o;
	}
	o=2*o;
	if ( !(r & 1) )
	{
	    
	    p1=faktor(r-i,c);
	    p2=faktor(i,c);
	    if (p1+p2 < p) ++o;
	} 

    }
    else if (c==4)
    {
	z=(r+1)/2-1;
	p=faktor(r,2)/2;
	for (i=1; i<=z; ++i)
	{
	    p1=faktor(r-i,2);
	    p2=faktor(i,2);
	    p1=(p1+p2)/2;
	    if (p1 < p) ++o;
	}
	o=2*o;
	if ( !(r & 1) )
	{
	    
	    p1=faktor(r-i,2);
	    p2=faktor(i,2);
	    p1=(p1+p2)/2;
	    if (p1 < p) ++o;
	}
    }
    else if (c==6)
    {
	//s1=faktor(r,2);
	z=(r+1)/2-1;
	p=faktor(r,3);
	
	for (i=1; i<=z; ++i)
	{ 
	    //s1=faktor(r-i,2);
	    p1=faktor(r-i,3);
	    
	    //s1=faktor(i,2);
	    p2=faktor(i,3);
	    

	    if (p1+p2 < p) ++o;
	}

	if ( !(r & 1) )
	{
	    p1=faktor(r-i,3);
	    p2=faktor(i,3);

	    if (p1+p2 < p) ++o;
	}


    }

    printf("%ld", o);

    fclose(stdin);
    fclose(stdout);

    return 0;

}