Cod sursa(job #2494279)

Utilizator bigmixerVictor Purice bigmixer Data 17 noiembrie 2019 17:15:22
Problema Factorial Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <bits/stdc++.h>
#define ll long long
#define all(a) (a).begin(), (a).end()
//#pragma GCC optimize("O3")
//#pragma GCC optimize("Ofast")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#define sz() size()
#define fr first
#define sc second
#define pb push_back
#define er erase
#define in insert
#define pi pair<int,int>
#define pii pair<pair<int,int>,int>
#define mp make_pair
#define int long long
#define rc(s) return cout<<s,0
#define rcc(s) cout<<s,exit(0)
///#define cin fin
///#define cout fout
using namespace std;

const int mod=1e9+7;

int p,ans;

int zero(int x){
    if(x==0) return -1;
    int sum=0,j=5;
    while(j<=x){
        sum+=(x/j);
        j*=5;
    }
    return sum;
}

int32_t main(){
	//ios_base::sync_with_stdio(false);cin.tie(0);cerr.tie(0);cout.tie(0);
    srand(chrono::steady_clock::now().time_since_epoch().count());
    ifstream fin("fact.in");
    ofstream fout("fact.out");
    fin >> p;
    int l=1;
    int r=1e18;
    while(l<=r){
        int mid=l+(r-l)/2;
        int x1=zero(mid);
        int x2=zero(mid-1);
        if(x1==p && x2==p-1){
            ans=mid;
            break;
        }
        else if(x1>=p) r=mid-1;
        else l=mid+1;
    }
    fout << ans << '\n';
}