Pagini recente » Solutii Autumn Warmup, Runda 2 | Cod sursa (job #575144) | Cod sursa (job #2978498) | Cod sursa (job #3167185) | Cod sursa (job #465752)
Cod sursa(job #465752)
#include <stdio.h>
#include <string.h>
using namespace std;
#define MAX 100000
char sir[40];
int ciur[MAX], p[100], st[40];
int i, j, k, P, n;
int lg, AS, suma;
long long solutie;
int numar;
void init ()
{
st[k] = 0;
}
int Am_Succesor ()
{
if (st[k] < n)
{
st[k] ++;
return 1;
}
return 0;
}
int E_Valid ()
{
for (j=1; j<k; ++j)
if (st[k] == st[j])
return 0;
return 1;
}
int Solutie ()
{
if (k == n)
return 1;
return 0;
}
void back ()
{
k = 1;
init ();
while (k > 0)
{
do
{ }
while ( (AS=Am_Succesor()) && !E_Valid() );
if (AS)
if (Solutie () )
{
numar = 0;
//numar = numar * 10 + (sir[st[k-2]-1] - '0');
numar = numar * 10 + (sir[st[k-1]-1] - '0');
numar = numar * 10 + (sir[st[k]-1] - '0');
//printf ("\nnumar = %d\n______\n", numar);
int gasit = 1;
for (i=1; i<=lg; ++i)
{
if (p[i] == 3)
if (suma % 3 != 0)
{
gasit = 0;
break;
}
if (numar % p[i] != 0)
{
gasit = 0;
break;
}
}
if (gasit)
solutie ++;
}
else
{
k ++;
init ();
}
else
k --;
}
}
int main ()
{
FILE *f = fopen ("ratphu.in","r");
FILE *g = fopen ("ratphu.out","w");
fscanf (f,"%s", sir);
fscanf (f,"%d", &P);
n = strlen(sir);
for (i=0; i<n; ++i)
suma += (sir[i] - '0');
for (i=2; i<MAX; ++i)
ciur[i] = 1;
for (i=2; i*i<MAX; ++i)
if (ciur[i] == 1)
for (j=2; j*i<MAX; ++j)
ciur[j*i] = 0;
j = 2;
while (P > 1)
{
while (ciur[j] != 1)
j ++;
if (P % j == 0)
{
lg ++;
p[lg] = j;
while (P % j == 0)
P /= j;
}
j ++;
}
back();
fprintf (g,"%lld", solutie);
fclose(g);
fclose(f);
return 0;
}