Pagini recente » Cod sursa (job #2275158) | Cod sursa (job #923548) | Cod sursa (job #142756) | Cod sursa (job #2046223) | Cod sursa (job #2720564)
#include <stdio.h>
#include <math.h>
long long fact(int p, long long lower, long long upper);
int sumare(long long n);
int main(){
int p;
long long upper=2000000000;
FILE *f;
f=fopen("fact.in", "r");
fscanf(f, "%d", &p);
fclose(f);
f=fopen("fact.out", "w");
fprintf(f, "%lld", fact(p, 4*p, upper));
fclose(f);
return 0;
}
long long fact(int p, long long lower, long long upper){
int sum;
long long n=(lower+upper)/2;
sum=sumare(n);
if(p == 0){
return 1;
}
if(n+1 == upper && sum>p){
return -1;
}
if((sum == p)){
if(n>1){
while(n%5!=0){
n--;
}
}
return n;
}
if(sum > p){
return fact(p, lower, n);
}
else{
return fact(p, n, upper);
}
}
int sumare(long long n){
int i=1, rez=0;
while(n>=pow(5,i)){
rez+=floor(n/pow(5,i));
i++;
}
return rez;
}