Pagini recente » Cod sursa (job #2097597) | Cod sursa (job #852075) | Cod sursa (job #2772156) | Cod sursa (job #202722) | Cod sursa (job #3261417)
#include <iostream>
#include <fstream>
#define nl '\n'
using namespace std;
const long long INF = 1LL << 62;
int Fp[15], Ex[15], Nf;
long long Expf[15];
ifstream fin("zero2.in");
ofstream fout("zero2.out");
void desc(int n)
{
Nf = 0;
for (int d = 2; d*d <= n; d += (d == 2) ? 1 : 2)
{
if (n % d == 0)
{
Nf++;
Fp[Nf] = d;
Ex[Nf] = 0;
do
{
Ex[Nf]++;
n/=d;
}
while (n % d == 0);
}
}
if (n > 1)
{
Nf++;
Fp[Nf] = n;
Ex[Nf] = 1;
}
}
void expp(int N)
{
for (int i = 1; i <= Nf; i++)
{
long long pp = Fp[i];
Expf[i] = 0;
while (N >= pp)
{
int k = N / pp;
Expf[i] += pp*k*(k-1)/2;
Expf[i] += (N-k*pp+1)*k;
pp *= Fp[i];
}
}
}
int main()
{
int N, B, t = 10;
long long nrz;
while (t--)
{
fin >> N >> B;
desc(B);
expp(N);
nrz = INF;
for (int i = 1; i <= Nf; i++)
nrz = min(nrz, Expf[i]/Ex[i]);
fout << nrz << nl;
}
return 0;
}