Cod sursa(job #1693943)

Utilizator andreicoman299Coman Andrei andreicoman299 Data 24 aprilie 2016 12:53:25
Problema Factorial Scor 100
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+1;
    while(dr-st>1){
        m=min(p2((st+dr)/2), p5((st+dr)/2));
        if(m<p)
            st=(st+dr)/2+1;
        else
            dr=(st+dr)/2;
    }
    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;
}