Cod sursa(job #670613)

Utilizator marius.bucurBucur Marius - Ovidiu marius.bucur Data 29 ianuarie 2012 16:39:05
Problema GFact Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include<iostream>
#include<fstream>
#include<cmath>
using namespace std;
int P,Q;
ifstream in("gfact.in");
ofstream out("gfact.out");
int get(int N, int prime){
    int k=0;
    int N1=N;
    while(N){
        k+=N/prime;
        N/=prime;
    }
    cout << ">>>>>" << N1 << " " << prime << " " << k<<endl;
    return k;
}
int main()
{
    in >> P >> Q;
    int prime=0;
    int lastprime;
    int lastsum;
    int P1=P;
    for(int i = 2; i <= sqrt(P); i++){
        if(P1%i==0){
            lastsum=0;
            prime=1;
            lastprime=i;
            while(P1%i==0){P1/=i;lastsum++;}
        }
    }
    if(!prime){lastprime=P;lastsum=1;}
    cout << lastprime << " " << lastsum << endl;
    lastsum*=Q;
    int start=0;
    int end=2000000000;
    while(start<end){
        int mid=start+(end-start)/2;
        int nr = get(mid, lastprime);
        if(nr==lastsum){
            start=end=mid;
            break;
        }
        if(nr>lastsum){
            end=mid;
        }else{
            start=mid+1;
        }
    }
    while(get(start,lastprime)==lastsum)start--;
    out << (start+1) << endl;
    return 0;
}