Pagini recente » Cod sursa (job #1031081) | Cod sursa (job #308335) | Cod sursa (job #511929) | Cod sursa (job #2217480) | Cod sursa (job #3250578)
#include <fstream>
#include <vector>
using namespace std;
ifstream f("pascal.in");
ofstream g("pascal.out");
const int nmax = 5000005;
int r, d, exp[nmax], divi[5], numi, Min[nmax];
bool ciur[nmax];
vector<int> prim;
void Ciur()
{
for(int i = 2; i * i <= nmax - 5; i ++)
if(!ciur[i])
for(int j = 2 * i; j <= nmax - 5; j += i)
{
if(!Min[j]) Min[j] = i;
ciur[j] = true;
}
for(int i = 2; i <= nmax - 5; i ++)
if(!ciur[i])
Min[i] = i, prim.push_back(i);
}
void desc(int x, int semn)
{
while(x > 1)
{
int d2 = Min[x];
int p = lower_bound(prim.begin(), prim.end(), d2) - prim.begin();
while(x % d2 == 0)
x /= d2, exp[p] += semn;
}
}
int main()
{
Ciur();
f >> r >> d;
for(int i = 0; i < 3; i ++)
while(d % prim[i] == 0)
d /= prim[i], divi[i] ++;
for(int i = 1; i < r; i ++)
{
desc(r - i + 1, 1);
desc(i, -1);
if(exp[0] >= divi[0] && exp[1] >= divi[1] && exp[2] >= divi[2])
numi ++;
}
g << numi;
return 0;
}