Cod sursa(job #2335019)

Utilizator StefanSanStanescu Stefan StefanSan Data 3 februarie 2019 14:51:24
Problema Factorial Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <string>
using namespace std;

ifstream in("fact.in");
ofstream out("fact.out");

int power(long long int N, long long int P) {
	long long int r = 1;
	while (P)
	{
		if (P % 2 == 1)
			r = r * N;
		N = N * N;
		P = P / 2;
	}
	return r;
}
int legendre(long long int x) {
	long long int j = 1, sum = 0;
	while (power(5, j) <= x) {
		sum += x / power(5, j);
		j++;
	}
	return sum;
}
int main() {
	long long int n;
	in >> n;
	if(n == 0){
        out << 1;
	}else{
	long long int sol = -1, left = 0, right = 1000000000;
	while (left < right) {
		long long int mid = (left + right) / 2;
		if (legendre(mid) == n) {
			sol = mid;
			break;
		}
		if (legendre(mid) > n) {
			right = mid - 1;
		}
		if (legendre(mid) < n) {
			left = mid + 1;
		}
	}
	if(sol != -1){
	while(sol % 5 != 0) sol -= 1;
	}
	out << sol;
	}
}