Cod sursa(job #157808)

Utilizator ciprianfFarcasanu Alexandru Ciprian ciprianf Data 13 martie 2008 11:55:45
Problema GFact Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.65 kb
#include <stdio.h>
long long unsigned caut(long long unsigned c,long long unsigned d){
	long long unsigned st,dr,m,cd,nr;
	st=1;
	dr=c*d*2;
	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(st%d) st--;
	return st;
}
int main(){
	long long unsigned p,q,d,c,var,max=0;
	FILE*f=fopen("gfact.in","r");
	FILE*g=fopen("gfact.out","w");
	fscanf(f,"%llu%llu",&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,"%llu",max);
}