Pagini recente » Cod sursa (job #2942498) | Cod sursa (job #903151) | Cod sursa (job #1167144) | Cod sursa (job #13252) | Cod sursa (job #2230676)
#include <bits/stdc++.h>
using namespace std;
inline long long legendre(int x, int y){
long long p = y, Sol = 0;
while(p <= x) {
int r = x / p;
Sol = Sol + 1LL * p * (1LL * r * (r + 1) / 2);
int rest = (x + 1) % p;
if(rest > 0) Sol = Sol - 1LL * r * (p - rest);
p = p * y;
}
return Sol;
}
inline long long solve(int x, int y){
long long Sol = (1LL << 63) - 1;
int d = 2;
while(d * d <= y){
if(y % d == 0){
int cnt = 0;
while(y % d == 0) y = y / d, ++cnt;
Sol = min(Sol, legendre(x, d) / cnt);
}
++d;
}
if(y > 1) Sol = min(Sol, legendre(x, y));
return Sol;
}
int main()
{
freopen("zero2.in", "r", stdin);
freopen("zero2.out", "w", stdout);
int t = 10;
while(t--){
int x, y;
scanf("%d%d", &x, &y);
printf("%lld\n", solve(x, y));
}
return 0;
}