Pagini recente » Cod sursa (job #3260674) | Cod sursa (job #2926286) | Cod sursa (job #988600) | Cod sursa (job #1368165) | Cod sursa (job #1701088)
#include <bits/stdc++.h>
using namespace std;
typedef pair<int, int> PII;
typedef long long i64;
const int SB = 1<<24;
vector<PII> facts;
void pfact(int arg) {
i64 p = 1;
while(p*p <= arg) {
++p;
if(arg%p)
continue;
facts.push_back(make_pair(p, 0));
while(arg%p==0) {
++facts.back().second;
arg/=p;
}
}
if(arg>1)
facts.push_back(make_pair(arg, 1));
}
int legendre(int num, int p) {
int ans = 0;
i64 pt = p;
while(pt<=num) {
ans+= num / pt;
pt *= p;
}
return ans;
}
bool check(int arg) {
for(auto i:facts)
if(legendre(arg, i.first)<i.second)
return false;
return true;
}
int cbin(void) {
int m, ans = 0;
for(m=SB; m; m>>=1)
if(!check(ans|m))
ans|=m;
++ans;
return ans;
}
int main(void) {
FILE *fi = fopen("gfact.in","r");
FILE *fo = fopen("gfact.out","w");
int p, q;
fscanf(fi,"%d%d",&p,&q);
pfact(p);
for(auto &i:facts)
i.second*=q;
fprintf(fo,"%d\n",cbin());
fclose(fi);
fclose(fo);
return 0;
}