Pagini recente » Cod sursa (job #2197701) | Cod sursa (job #2314804) | Cod sursa (job #2506629) | Cod sursa (job #429074) | Cod sursa (job #369316)
Cod sursa(job #369316)
#include<cstdio>
long factor ( long n , long x )
{
long e= 0L , p = x ;
if ( x == 2 || x == 3 || x == 5 )
{
while ( n / p )
{
e+=n/p;
p*=x;
}
return e ;
}
switch (x)
{
case 4: {
p=2;
while ( n / p )
{
e+=n/p;
p*=2;
}
return e;
}
case 6: {
p=3;
while ( n / p )
{
e+=n/p;
p*=3;
}
return e;
}
}
return 0 ;
}
long fct ( long n , long x )
{
long e = 0 ;
int p ;
if ( !n ) return 0 ;
if ( x == 2 || x == 3 || x == 5 )
{
while ( n % p == 0 )
{
++e;
n/=p;
}
return e ;
}
switch (x)
{
case 4: {
p=2;
while ( n % p ==0)
{
++e;
n/=p;
}
return e;
}
case 6: {
p=3;
while ( n % p == 0 )
{
++e;
n/=p;
}
return e;
}
}
return 0 ;
}
int main ( )
{
freopen ( "pascal.in" , "r" , stdin ) ;
freopen ( "pascal.out" , "w" , stdout ) ;
long R , D , nrd , nrd1 , nrd2 , nrdiv = 0 , i ;
long nr2d , nr2d1 , nr2d2 ;
scanf ( "%ld%ld" , & R , & D ) ;
nrd = factor ( R , D ) ;
nrd1 = 0L ;//factorial de i
nrd2 = nrd;//factorial (R-i)
nr2d = factor ( R , 2 ) ;
nr2d1 = 0L ;
nr2d2 = nr2d;
for ( i=1 ; i < R ; ++ i )
{
nr2d1 += fct ( i , 2 ) ;
nr2d2 -= fct ( R-i+1, 2 ) ;
nrd1 += fct ( i , D ) ;
if ( nrd1 > nrd ) continue;
nrd2 -= fct (R-i+1, D) ;
if ( nrd1 + nrd2 >= nrd ) continue;
if ( D == 4 && nrd - nrd1 - nrd2 >= 2 )
{
++nrdiv;
continue;
}
if ( D == 6 && nr2d - nr2d1 - nr2d2 > 0 )
{
++nrdiv;
continue;
}
if ( D != 4 && D!= 6) nrdiv ++ ;
}
printf ( "%d" , nrdiv ) ;
return 0 ;
}