Pagini recente » Cod sursa (job #222259) | Cod sursa (job #1294042) | Cod sursa (job #858640) | Rating Ngo Hoang Tung (trickerbp) | Cod sursa (job #433580)
Cod sursa(job #433580)
#include<stdio.h>
FILE*f=fopen("gfact.in","r");
FILE*g=fopen("gfact.out","w");
int z,aux,j,a[2][7000],k,p[5500],i,q,m,min,max,b[7000],t,s,mij;
char v[50001];
int main () {
fscanf(f,"%d %d",&m,&q);
for(i=2;i<=50000;i++){
if(v[i]==0){
p[++k]=i;
for(j=i+i;j<=50000;j++)
v[j]=1;
}
}
aux=m;
for(i=1;p[i]<=m;i++){
if(aux%p[i]==0)
a[0][++z]=p[i];
while(aux%p[i]==0){
a[1][z]++;
aux/=p[i];
}
a[1][z]*=q;
}
if(aux!=1){
a[0][++z]=aux;
a[1][z]=q;
}
for(i=1;i<=z;i++){
// cautam binar cea mai mica valoare x! care se divide cu a[0][i]^a[1][i]
min = 1; max = 2*a[0][i]*a[1][i]*q;
while(min<=max){
mij = min + (max - min)/2;
s=0;
t=1;
while(t<mij){
t*=2;
s+=mij/t;
}
if(s>=a[1][i])
//caut in stanga
max = mij - 1;
else
//caut in dreapta
min = mij + 1;
}
b[i]=min;
}
max=0;
for(i=1;i<=z;i++)
if(b[i]>max)
max=b[i];
fprintf(g,"%d",max);
fclose(f);
fclose(g);
return 0;
}