Cod sursa(job #138811)

Utilizator ciprianfFarcasanu Alexandru Ciprian ciprianf Data 19 februarie 2008 11:21:01
Problema GFact Scor 35
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.6 kb
#include <stdio.h>
int caut(int c,int d){
	int st,dr,m,cd,nr;
	st=1;
	dr=c*d;
	while(st<=dr){
		cd=d;
		m=(st+dr)/2;
		nr=0;
		while(m/cd){
			nr+=m/cd;
			cd*=d;
		}
		if(nr==c) { while(m%d) m--; return m; }
		else if(nr>c) dr=m-1;
		else st=m+1;
	}
	while(m%d) m--;
	return m;
}
int main(){
	int p,q,d,c,var,max=0;
	FILE*f=fopen("gfact.in","r");
	FILE*g=fopen("gfact.out","w");
	fscanf(f,"%d%d",&p,&q);
	for(d=2;d*d<=p;d++){
		for(c=0;p%d==0;c++,p/=d);
		if(c) var=caut(c*q,d);
		if(var>max) max=var;
	}
	if(p>1) { var=caut(q,p);
		if(var>max) max=var; }
	fprintf(g,"%d",max);
}