Cod sursa(job #1119021)
Utilizator | Data | 24 februarie 2014 14:35:03 | |
---|---|---|---|
Problema | GFact | Scor | 80 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.88 kb |
#include<fstream>
using namespace std;
long long i, n, k, v[300003], m[1000003], nr, p, u, mij, ok, xer, kij;
ifstream fin("gfact.in");
ofstream fout("gfact.out");
int main(){
fin>>n>>k;
for(i=2; i*i<=n; i++){
if(n%i==0){
v[++nr]=i;
while(n%i==0){
m[i]+=k;
n/=i;
}
}
}
if(n!=1){
v[++nr]=n;
m[n]=k;
}
p=1; u=20000000000;
while(p<=u){
ok=0;
mij=p+(u-p)/2;
for(i=1; i<=nr; i++){
xer=0; kij=v[i];
while(mij/kij!=0){
xer+=mij/kij;
kij*=v[i];
}
if(xer<m[v[i]]){
ok=1;
break;
}
}
if(ok==1)
p=mij+1;
else
u=mij-1;
}
fout<<p;
return 0;
}