Pagini recente » Cod sursa (job #1940885) | Cod sursa (job #2382231) | Cod sursa (job #1570850) | Cod sursa (job #330246) | Cod sursa (job #825210)
Cod sursa(job #825210)
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <vector>
#define MAX_SIZE 5000001
using namespace std;
short A[MAX_SIZE][2];
int size = -1;
short divizori[2];
short is_divizible(int R , int poz)
{
int ok = 1;
for (int i = 0 ; i <= size;i++)
{
if (A[R][i] - A[poz][i]- A[R-poz][i] < divizori[i])
{
ok = 0;
}
}
return ok;
}
int main()
{
FILE *input = fopen("pascal.in","r");
FILE *output = fopen("pascal.out","w");
int R;
int D;
fscanf(input,"%d%d",&R,&D);
short div = 2;
while (D != 1)
{
short ok = 0;
short nr = 0;
while (D % div == 0 )
{
D /= div;
nr++;
ok = 1;
}
if ( ok == 1)
{
size ++;
divizori[size] = nr;
A[0][size] = 0;
for (int i = 1 ; i<= R ;i++ )
{
int sum = 0;
int x = i;
while (x % div== 0)
{
x /= div;
sum++;
}
A[i][size] = A[i-1][size] + sum;
}
}
div++;
}
int raspuns = 0;
for (int i = 1; i < (R / 2); i++ )
{
if (is_divizible(R,i) == 1)
{
raspuns++;
raspuns++;
}
}
if ((R-1) % 2 == 0)
{
if (is_divizible(R,R/2) == 1)
{
raspuns++;
raspuns++;
}
}
else
{
if (is_divizible(R,R/2) == 1)
{
raspuns++;
}
}
fprintf(output,"%d",raspuns);
fclose(input);
fclose(output);
return 0;
}