Pagini recente » Cod sursa (job #1570013) | Cod sursa (job #2493898) | Cod sursa (job #2125289) | Cod sursa (job #2808750) | Cod sursa (job #1113257)
#include <cstdio>
#include <algorithm>
#include <vector>
#define x first
#define y second
#define LL long long
using namespace std;
vector< pair< LL, LL > > D;
void desc(LL n){
D.clear();
if(n % 2 == 0){
D.push_back(make_pair(2, 0));
while(n % 2 == 0){
++D[0].y;
n /= 2;
}
}
for(LL i = 3; i * i <= n && n != 1; i += 2)
if(n % i == 0){
D.push_back(make_pair(i, 0));
LL Size = D.size() - 1;
while(n % i == 0){
n /= i;
++D[Size].y;
}
}
if(n > 1)
D.push_back(make_pair(n, 1));
}
inline LL solve(LL n, LL k){
desc(k);///descompun baza
LL Ans = -1;
for(vector< pair< LL, LL > >::iterator it = D.begin(); it != D.end(); ++it){
LL Sol = 0, Number = (LL)it->x;
while(Number <= n){
LL c = (LL)n / Number;
Sol += Number * c * (c - 1) / 2;
Sol += (n - Number * c + 1) * c;
Number *= it->x;
}
if(Ans == -1)
Ans = Sol / it->y;
else
Ans = min(Ans, (LL)Sol / (it->y));
}
return Ans;
}
int main(){
freopen("zero2.in", "r", stdin);
freopen("zero2.out", "w", stdout);
for(LL L = 1; L <= 10; ++L){
LL n, k;
scanf("%lld %lld", &n, &k);
printf("%lld\n", solve(n, k));
}
return 0;
}