Pagini recente » Cod sursa (job #2073719) | Cod sursa (job #1040254) | Cod sursa (job #2516520) | Cod sursa (job #895741) | Cod sursa (job #881507)
Cod sursa(job #881507)
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
using namespace std;
int main()
{
FILE* f=fopen("gfact.in","r");
FILE* g=fopen("gfact.out","w");
int p,q;
fscanf(f,"%d%d",&p,&q);
int puteri[50];
int val[50];
int n=0;
int cp = p;
for(int i=2;i<=p;i++)
{
if (p%i==0)
{
puteri[n]=0;
val[n]=i;
while(p%i==0)
{
puteri[n]++;
p/=i;
}
n++;
}
}
for(int i=0;i<n;i++)
{
puteri[i]*=q;
}
p = cp;
unsigned long long start=2;
unsigned long long stop=p*q;
unsigned long long mijloc;
unsigned long long solutie=0;
while(stop>=start)
{
mijloc=(stop+start)/2;
bool gasit=false;
for(int i=0;i<n;i++)
{
int k=0;
int v = val[i];
for(int j=1;j<=puteri[i];j++)
{
k+=mijloc/v;
v *= val[i];
if(k>=puteri[i])
{
break;
}
}
if(k<puteri[i])
{
gasit=true;
}
}
if(!gasit)
{
solutie = mijloc;
stop=mijloc-1;
}
else
{
start=mijloc+1;
}
}
if(p==1)
{
fprintf(g,"1");
}
if(solutie!=0)
{
fprintf(g,"%llu",solutie);
}
return 0;
}