Pagini recente » Cod sursa (job #87783) | Cod sursa (job #2633006) | Cod sursa (job #265530) | Cod sursa (job #2434670) | Cod sursa (job #866301)
Cod sursa(job #866301)
#include <fstream>
#define oo (1LL<<60)
#define a1 (N%D+1)
#define r (D)
#define n (N/D)
#define min(a,b) ((a)<(b)?(a):(b))
using namespace std;
long long N,B;
long long Result(long long D,long long P) {
long long Sum;
for(Sum=0;D<=N;D*=D)
Sum+=n*(2*a1+r*(n-1))/2;
return (Sum/P);
}
long long Solve() {
int i;
long long Ans,D,P;
Ans=oo;
for(D=2,P=0;B%D==0;P++)
B/=D;
if(P)
Ans=min(Ans,Result(D,P));
for(i=3;i*i<=B;i+=2)
if(B%i==0) {
D=i;
P=0;
while(B%i==0)
B/=i,P++;
Ans=min(Ans,Result(D,P));
}
if(B>1)
Ans=min(Ans,Result(B,1));
return Ans;
}
int main() {
ifstream in("zero2.in");
ofstream out("zero2.out");
for(int T=10;T;T--) {
in>>N>>B;
out<<Solve()<<'\n';
}
in.close();
out.close();
return 0;
}