Pagini recente » Cod sursa (job #2524843) | Cod sursa (job #579989) | Cod sursa (job #172083) | Cod sursa (job #2486181) | Cod sursa (job #1345832)
#include <fstream>
#define IN "ratphu.in"
#define OUT "ratphu.out"
const int MAXr = 25 ;
const int MAXm = ( 1 << 18 ) + 5 ;
using namespace std;
ifstream fin ( IN ) ;
ofstream fout ( OUT ) ;
long long d [ MAXr ] [ MAXm ] ;
int dig [ MAXr ] ;
int main()
{
long long int n ;
int p , m = 0 ;
fin >> n >> p ;
d [ 0 ] [ 0 ] = 1 ;
while ( n ) {
dig [ m ++ ] = n % 10 ;
n /= 10 ;
}
for ( register int mask = 0 ; mask < ( 1 << m ) ; ++ mask )
for ( register int r = 0 ; r < p ; ++ r )
if ( d [ r ] [ mask ] )
for ( register int c = 0 ; c < m ; ++ c )
if ( !( mask & ( 1 << c ) ) ){
int r2 = r * 10 + dig [ c ] ;
while ( r2 >= p )
r2 -= p ;
d [ r2 ] [ mask | ( 1 << c ) ] += d [ r ] [ mask ] ;
}
fout << d [ 0 ] [ ( 1 << m ) - 1 ] ;
return 0;
}