Cod sursa(job #866301)

Utilizator okros_alexandruOkros Alexandru okros_alexandru Data 27 ianuarie 2013 19:20:54
Problema Zero 2 Scor 95
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#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;

}