Pagini recente » Cod sursa (job #2251457) | Cod sursa (job #80953) | Cod sursa (job #599877) | Cod sursa (job #137203) | Cod sursa (job #754270)
Cod sursa(job #754270)
#include<iostream>
#include<fstream>
using namespace std;
long long p,q,d[30],pu[30],nr;
void fact(long long a);
bool div(long long a);
ifstream aa("gfact.in");
ofstream ss("gfact.out");
int main() {
long long i,pas;
aa >> p >> q;
fact(p);
pas=(long long)1<<60;
for (i=0;pas!=0;pas>>=1) {
if (!div(i+pas)) i+=pas;
}
ss << i+1;
return 0;
}
bool div(long long a) {
long long nr2,i,s;
for (i=1;i<=nr;++i) {
nr2=0; s=a;
while (s>0) {
nr2+=s/d[i];
s/=d[i];
if (nr2>=pu[i]) break;
}
if (!(nr2>=pu[i])) return false;
}
return true;
}
void fact(long long a) {
long long i;
for (i=2;i*i<=a;++i) {
if (a%i==0) {
d[++nr]=i;
pu[nr]=0;
while (a%i==0) {
a/=i;
pu[nr]+=q;
}
}
}
if (a!=1) {
d[++nr]=a;
pu[nr]=q;
}
}