Pagini recente » Cod sursa (job #103327) | Cod sursa (job #264947) | Cod sursa (job #1846879) | Cod sursa (job #1255653) | Cod sursa (job #3139983)
#include <fstream>
#include <map>
using namespace std;
ifstream f("zero2.in");
ofstream g("zero2.out");
const long long INF = 1LL << 62;
int Fp[15], Ex[15], Nf;
long long Expf[15];
void desc(int n) {
Nf = 0;
for(int d = 2; d * d <= n; d += (d == 2) ? 1 : 2)
if(n % d == 0) {
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--) {
f >> N >> B;
desc(B);
expp(N);
nrz = INF;
for(int i = 1; i <= Nf; i++)
nrz = min(nrz, Expf[i] / Ex[i]);
g << nrz << '\n';
}
}
/*
map<long long, long long> m, m2;
void desc(int b) {
while (b % 2 == 0) {
m[2]++; b /= 2;
}
for(int d = 3; d <= b; d += 2)
while (b % d == 0) {
m[d]++; b /= d;
}
}
long long legendre(long long n, long long n2) {
long long x = 0;
while(n >= n2) {
x += n / n2;
n /= n2;
}
return x;
}
int main() {
int n, b;
while(f >> n >> b) {
m.clear();
m2.clear();
desc(b);
for (int i = 2; i <= n; i++) {
for (auto el: m)
m2[el.first] += (n - i + 1) * legendre(i, el.first);
}
long long mi = 9223372036854775807;
for (auto el: m)
mi = min(mi, m2[el.first] / el.second);
g << mi << '\n';
}
f.close();
g.close();
return 0;
}*/