Pagini recente » Cod sursa (job #3128944) | Cod sursa (job #2956370) | Cod sursa (job #1448804) | Monitorul de evaluare | Cod sursa (job #1622968)
#include <iostream>
#include <cstdio>
using namespace std;
FILE *f,*g;
long long p,q,i,mx,cexp,nd;
long long exp[10001],d[10001];
bool ok;
long long putere(long long n,long long d)
{
long long p=0;
while(n>=d)
p+=n/d,n/=d;
return p;
}
bool divizibil(long long n)
{
for (int i = 1; i <= nd; i++)
if (putere(n, d[i]) < exp[i] * q)
return false;
return true;
}
int main()
{
f=fopen("gfact.in","r");
g=fopen("gfact.out","w");
fscanf(f,"%lld%lld",&p,&q);
long long n=p;
long long d1 = 2;
while (d1 * d1 <= n)
{
if (n % d1 == 0)
{
p = 0;
while (n % d1 == 0)
{
p++;
n /= d1;
}
d[++nd]=d1;
exp[nd]=i;
}
d1++;
}
if (n != 1)
exp[++nd]=1,d[nd]=n;
/* for(i=1;i<=c;i++)
fprintf(g,"%d\n",exp[i]);*/
//caut binar cel mai mare i cu proprietatea ca i! nu e divizibil cu p la q
i = 0;
long long pas = 1LL << 60;
while (pas != 0)
{
if (!divizibil(i + pas))
i += pas;
pas /= 2;
}
/*i=mx;
cexp=1;
int c=0;
if(exp[mx]>1)
{
while(ok==0)
{
i+=mx;
if(i%mx==0)
{
c=i;
while(c%mx==0)
{
c/=mx;
cexp++;
}
if(cexp>=exp[mx])
{
ok=1;
break;
}
}
}
}*/
fprintf(g,"%lld",1 + i);
fclose(f);
fclose(g);
return 0;
}