Pagini recente » Cod sursa (job #1493181) | Cod sursa (job #65547) | Cod sursa (job #2541195) | Cod sursa (job #2414722) | Cod sursa (job #1766216)
#include <fstream>
#include <math.h>
using namespace std;
unsigned long int r;
int d;
unsigned int nr2[2500000], nr3[2500000], nr5[2500000];
int calcdiv(int nr, int d)
{
int temp = nr;
int p = d;
int val = temp/p;
int sol = 0;
while(val)
{
sol += val;
p*=d;
val = temp/p;
}
return sol;
}
bool b = false;
bool b2 = false;
int main()
{
ifstream f("pascal.in");
ofstream g("pascal.out");
f >> r >> d;
int r2 = r/2+1;
if(r%2 == 0)
{
b = true;
}
int lv2 = calcdiv(r,2);
int lv3 = calcdiv(r,3);
int lv5 = calcdiv(r,5);
for(unsigned int i = 0; i < r2; i++)
{
nr2[i] = lv2 - calcdiv(r-i,2) - calcdiv(i,2);
}
for(unsigned int i = 0; i < r2; i++)
{
nr3[i] = lv3 - calcdiv(r-i,3) - calcdiv(i,3);
}
for(unsigned int i = 0; i < r2; i++)
{
nr5[i] = lv5 - calcdiv(r-i,5) - calcdiv(i,5);
}
if(b) r2--;
int k = 0;
if(d == 2)
{
for(unsigned int i = 0; i < r2; i++)
{
if(nr2[i] != 0) k++;
}
if(b) if(nr2[r2] != 0) b2 = true;
}
else
if(d == 3)
{
for(unsigned int i = 0; i < r2; i++)
{
if(nr3[i] != 0) k++;
}
if(b) if(nr3[r2] != 0) b2 = true;
}
else
if(d == 4)
{
for(unsigned int i = 0; i < r2; i++)
{
if(nr2[i] >= 2) k++;
}
if(b) if(nr2[r2] >= 2) b2 = true;
}
else
if(d == 5)
{
for(unsigned int i = 0; i < r2; i++)
{
if(nr5[i] != 0) k++;
}
if(b) if(nr5[r2] != 0) b2 = true;
}
else
if(d == 6)
{
for(unsigned int i = 0; i < r2; i++)
{
if(nr2[i] != 0 && nr3[i] != 0) k++;
}
if(b) if(nr2[r2] != 0 && nr3[r2] != 0) b2 = true;
}
if(r == 2 && d == 2)
g << 1;
else
if(b2)
g << k*2+1;
else
g << k*2;
return 0;
}