Pagini recente » Cod sursa (job #139754) | Cod sursa (job #1154810) | Cod sursa (job #2698808) | Cod sursa (job #2342911) | Cod sursa (job #513351)
Cod sursa(job #513351)
#include<fstream>
using namespace std;
int p;
//functie care intoarce fm lui 5 din desc in factori primi ai unui nr
int putere5(int n)
{
int contor=0;
while(n%5==0)
{
contor++;
n/=5;
}
return contor;
}
//de cate ori apare 5 in desc in factori primi ai lui n!
int putere5infact(int n)
{
int i,contor5=0;
for(i=5;i<=n;i++)
contor5+=putere5(i);
return contor5;
}
int main()
{
ifstream f("fact.in");
ofstream g("fact.out");
f>>p;
if(p==0)
{
g<<1;
return 0;
}
//cautare binara
// a=0 si b=10 milioane. daca nrzerodinfact((a+b)/2)<p tre sa caut in dreapta, altfel caut in stanga
//repet pana nrdezerodinfact=p sau a il depaseste pe b(in acest caz afisez -1)
int a=0,b=10000000,c,rez,gasit=0;
while(a<b && gasit==0)
{
c=(a+b)/2;
rez=putere5infact(c);
if(rez<p)
a=c+1;
else
if(rez>p)
b=c-1;
else
{
//nu stim daca nr gasit este cel mai mic, dar el oricum face parte dintr o multime cu maxim 5 elemente
//nr corect este si multiplu de 5
//impart nr la 5 si scad restul din el.Ex 13%5=3 deci nr minim va fi 13-3=10
c=c-c%5;
g<<c;
gasit=1;
}
}
if(gasit==0)
g<<-1;
return 0;
}