Cod sursa(job #1693893)

Utilizator andreicoman299Coman Andrei andreicoman299 Data 24 aprilie 2016 09:14:51
Problema Factorial Scor 15
Compilator c Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <stdio.h>
#include <stdlib.h>

int min(int a, int b){
    return a < b ? a : b;
}

int p2(int n){
    int p=2, s=0;
    while(p<=n){
        s+=n/p;
        p*=2;
    }
    return s;
}

int p5(int n){
    int p=5, s=0;
    while(p<=n){
        s+=n/p;
        p*=5;
    }
    return s;
}

int main(){
    int p;
    FILE*fi,*fo;
    fi=fopen("fact.in","r");
    fo=fopen("fact.out","w");
    fscanf(fi,"%d", &p);

    int st, dr, m, n;
    st=1;
    dr=5*p;
    while(st<=dr){
        m=min(p2((st+dr)/2), p5((st+dr)/2));
        if(m<=p)
            st=(st+dr)/2+1;
        else
            dr=(st+dr)/2-1;
    }
    m=(st+dr)/2;
    if(min(p2(m), p5(m))>p) m--;
    if(min(p2(m), p5(m))==p)
        fprintf(fo,"%d", m);
    else
        fprintf(fo,"-1");

    fclose(fi);
    fclose(fo);
    return 0;
}