Nu aveti permisiuni pentru a descarca fisierul grader_test16.ok
Cod sursa(job #3212383)
| Utilizator | Data | 11 martie 2024 17:54:46 | |
|---|---|---|---|
| Problema | GFact | Scor | 0 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva de probleme | Marime | 0.9 kb |
#include <bits/stdc++.h>
using namespace std;
vector <pair<int, int>> puteri;
bool ok( int e ){
for( auto x : puteri ){
int cnt = 0;
int put = x.first;
while( put <= e ){
cnt += e/put;
put *= x.first;
}
if( cnt < x.second )
return 0;
}
return 1;
}
int main()
{
int n, q;
cin >> n >> q;
for( int d = 2; d * d <= n; d++ ){
int cnt = 0;
while( n % d == 0 ){
n /= d;
cnt++;
}
if( cnt )
puteri.push_back({d, cnt*q});
}
if( n > 1 )
puteri.push_back({n, q});
int st = 1, dr = 2e9, sol;
while( st <= dr ){
int mij = (st+dr)/2;
if( ok(mij) ){
sol = mij;
dr = mij - 1;
}
else
st = mij+1;
}
cout << sol;
return 0;
}
