Pagini recente » Cod sursa (job #3259234) | Cod sursa (job #2536179) | Cod sursa (job #775307) | Cod sursa (job #1306756) | Cod sursa (job #1508534)
#include <cstdio>
using namespace std;
#define Cmax 20
FILE *f = fopen ( "ratphu.in", "r" );
FILE *g = fopen ( "ratphu.out", "w" );
/*
Cif[i] = a i-a cifra a lui N ( index de la 0 )
D[Mask][j] = numarul de moduri de a obtine restul j cu un nr format cu cifre din Mask
*/
int Cif[Cmax];
long long D[1<<18][Cmax];
int main(){
long long N;
int NrC, P;
fscanf ( f, "%lld%d", &N, &P );
//scot cifrele lui N
for ( NrC = 0; N; ++NrC, N /= 10 )
Cif[NrC] = N % 10;
int MaxConf = ( 1 << NrC ); //configuratia maxima
D[0][0] = 1;
for ( int conf = 0; conf < MaxConf; ++conf ){ // pentru fiecare configuratie
for ( int i = 0; i < NrC; ++i ){ //incerc sa adaug a i-a cifra
if ( !( conf & (1<<i) ) ){ //daca nu am mai folosit-o pana acum
for ( int j = 0; j < P; ++j ){ //vad ce resturi pot obtine cu ea
D[conf|(1<<i)][( j*10 + Cif[i] ) % P] += D[conf][j];
}
}
}
}
//afisare
fprintf ( g, "%lld", D[MaxConf-1][0] );
return 0;
}