Pagini recente » Cod sursa (job #1705920) | Cod sursa (job #2311226) | Cod sursa (job #831077) | Cod sursa (job #3122127) | Cod sursa (job #2602338)
#include <bits/stdc++.h>
using namespace std;
ifstream f("pascal.in");
ofstream g("pascal.out");
char ap[5000001],ap2[5000001];
int main()
{
int n,d;
f >> n >> d;
if(n <= 1)
{
g << 0;
return 0;
}
if(d == 2 or d == 3 or d == 5)
{
int p = d;
int nr = 0;
while(p <= n)
{
ap[p] = ++nr;
for(int i = p + p; i <= n; i += p)
ap[i] = nr;
p *= d;
}
long long put = 0;
int raspuns = 0;
for(int i = 1; i <= n; ++i)
{
put += ap[n - i + 1] - ap[i];
if(put)
raspuns++;
}
g << raspuns;
}
else if(d == 4)
{
int p = 2;
int nr = 0;
while(p <= n)
{
ap[p] = ++nr;
for(int i = p + p; i <= n; i += p)
ap[i] = nr;
p *= 2;
}
long long put = 0;
int raspuns = 0;
for(int i = 1; i <= n; ++i)
{
put += ap[n - i + 1] - ap[i];
if(put >= 2)
raspuns++;
}
g << raspuns;
}
else
{
int p = 2;
int nr = 0;
while(p <= n)
{
ap[p] = ++nr;
for(int i = p + p; i <= n; i += p)
ap[i] = nr;
p *= 2;
}
p = 3;
nr = 0;
while(p <= n)
{
ap2[p] = ++nr;
for(int i = p + p; i <= n; i += p)
ap2[i] = nr;
p *= 3;
}
long long put = 0,put2;
int raspuns = 0;
for(int i = 1; i <= n; ++i)
{
put += ap[n - i + 1] - ap[i];
put2 += ap2[n - i + 1] - ap2[i];
if(put && put2)
raspuns++;
}
g << raspuns;
}
return 0;
}