Cod sursa(job #402807)

Utilizator andreea1coolBobu Andreea andreea1cool Data 24 februarie 2010 10:23:43
Problema Pascal Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.98 kb
#include<stdio.h>
#include<math.h>
   long int functie(long int n,long int p)
{
	long int s=0;
	while(n)
	{
	    s=s+n/p;
	    n=n/p;
	}
	return s;
}
 long int patru(long int n)
 {
     long int s=0;
     long int i;
     for(i=1;i<=n;i++)
     {
         long int t=i;
         while(t%2==0)
         {
             s++;
             t=t/2;
         }
     }
     return s;
 }
 long int sase(long int n)
 {
     long int s1=0;
     long int s2=0;
     long int i;
     for(i=1;i<=n;i++)
     {
       long int t=i;
       long int q=i;
       while(t%2==0)
       {
           s1++;
           t=t/2;
       }
       while(q%3==0)
       {
           s2++;
           q=q/3;
       }
     }
     if(s1>s2)
     {
         return s2;
     }else
     {
         if(s1<s2)
         {
             return s1;
         }else
         {
             return s1;
         }
     }
 }
int main()
{
    freopen("pascal.in","r",stdin);
    freopen("pascal.out","w",stdout);
    long int r,j,n,k1=0,k2=0,k3=0,d,p,c=0,i,q,s,t;
    scanf("%ld%ld",&r,&d);
    if(d==2||d==3||d==5)
    {
    k1=functie(r,d);
    }else
    {
        if(d==4)
        {
            k1=patru(r);
        }else
        {
            if(d==6)
            {
                k1=sase(r);
            }
        }
    }
	for(j=0;j<=r;j++)
	{
		p=r-j;
		if(d==2||d==3||d==5)
		{
            k2=functie(p,d);
            k3=functie(j,d);

            if(k1-k2-k3>0)
            {
                c++;
            }
        }
        else
        {
            if(d==4)
            {
                k2=patru(p);
                k3=patru(j);

                if(k1-k2-k3>0&&(k1-k2-k3)%2==0)
                {
                    c++;
                }
            }

             else
             {
                    k2=sase(p);
                    k3=sase(j);
                    if(k1-k2-k3>0)
                    {
                        c++;
                    }
             }
        }
        k2=0;
        k3=0;


    }
    printf("%ld",c);
    return 0;
}