Pagini recente » Cod sursa (job #1603529) | Cod sursa (job #1440671) | Cod sursa (job #1942993) | Cod sursa (job #427792) | Cod sursa (job #465723)
Cod sursa(job #465723)
#include<cstdio>
#include<string.h>
using namespace std;
int a[20],v[20];
int st[20];
char sir[22];
long long rez,contor;
int n,nr;
long long fact (int n)
{
long long rezult=1;
for (int i=2; i<=n; i++)
rezult*=i;
if (n==0) return 1;
return rezult;
}
int succesor(int k)
{
if (st[k]<n)
{
st[k]++;
return 1;
}
return 0;
}
int valid (int k)
{
int i;
for (i=1; i<k; i++)
if (st[i]==st[k]) return 0;
return 1;
}
int solutie (int k)
{
if (k==n) return 1;
return 0;
}
void back (int k)
{
st[k]=0;
while (succesor(k))
{
if (valid(k))
if (solutie(k))
{
long long numar=0;
for (int i=1; i<=n; i++)
numar=numar*10+v[st[i]];
if (numar%nr==0) contor++;
}
else if (k<=n) back(k+1);
}
}
int main ()
{
int ka1,ka2,ok,i,cont,sum_cif;
freopen("ratphu.in","r",stdin);
freopen("ratphu.out","w",stdout);
scanf("%s",&sir);
ok=0; ka1=0; ka2=0;
for (i=0; i<strlen(sir); i++)
{
if (sir[i]==' ') ok=1;
else if (ok==0)
v[++ka1]=int(sir[i])-'0';
}
scanf("%d",&nr);
n=ka1;
if (nr==2)
{
cont=0;
for (i=1; i<=n; i++)
if (v[i]%2==0) cont++;
rez=fact(n-1)*cont;
printf("%I64d",rez);
}
else if (nr==3)
{
sum_cif=0;
for (i=1; i<=n; i++)
sum_cif+=v[i];
if (sum_cif%3==0)
{
rez=fact(n);
printf("%I64d",rez);
}
else printf("0");
}
else if (nr==6)
{
sum_cif=0;
for (i=1; i<=n; i++)
sum_cif+=v[i];
cont=0;
for (i=1; i<=n; i++)
if (v[i]%2==0) cont++;
if (sum_cif%3==0)
{
rez=fact(n-1)*cont;
printf("%I64d",rez);
}
else printf("0");
}
else if (nr==9)
{
sum_cif=0;
for (i=1; i<=n; i++)
sum_cif+=v[i];
if (sum_cif%9==0)
{
rez=fact(n);
printf("%I64d",rez);
}
else printf("0");
}
else if (nr==5)
{
cont=0;
for (i=1; i<=n; i++)
if (v[i]%5==0) cont++;
rez=fact(n-1)*cont;
printf("%I64d",rez);
}
else if (nr==15)
{
sum_cif=0;
for (i=1; i<=n; i++)
sum_cif+=v[i];
if (sum_cif%3==0)
{
cont=0;
for (i=1; i<=n; i++)
if (v[i]%5==0) cont++;
rez=fact(n-1)*cont;
printf("%I64d",rez);
}
else printf("0");
}
else if (nr==1)
{
rez=fact(n);
printf("%I64d",rez);
}
else
{
contor=0;
back(1);
printf("%I64d",contor);
}
return 0;
}