#include <iostream>
#include <cstdlib>
#include <cmath>
int main()
{
uint64_t a=0, b=1;
uint64_t fk=a+b;
uint64_t k=2;
uint64_t c;
std::cin >> c;
if( c == 0 || c == 1 )
{
std::cout << c << std::endl;
return 0;
}
if( c == 2 || c == 3 )
{
std::cout << c+1 << std::endl;
return 0;
}
uint64_t t=10;
uint64_t w = 1;// t = 10^w
while( c/t >= 1)
{
++w;
t *= 10;
}
uint64_t xk = 1, xk1 = 1, x2k = 1, x2k1 = 2;
k = 1;
while( x2k1 < c )
{
xk = x2k;
xk1 = x2k1;
x2k = xk*(2*xk1-xk);
x2k1 = xk1*xk1 + xk*xk;
k *= 2;
}
uint64_t max_k = t/10*15;
a = xk;
b = xk1;
fk = a+b;
k += 2;
bool found = false;
while( ( fmod( fk, t ) != c ) && ( k<max_k ) )
{
a = b;
b = fk;
fk = fmod(a+b, t );
++k;
}
if( ( fmod( fk, t ) != c ) || (k==max_k))
{
std::cout << "NIE" << std::endl;
}
else
{
std::cout << k << std::endl;
}
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | #include <iostream> #include <cstdlib> #include <cmath> int main() { uint64_t a=0, b=1; uint64_t fk=a+b; uint64_t k=2; uint64_t c; std::cin >> c; if( c == 0 || c == 1 ) { std::cout << c << std::endl; return 0; } if( c == 2 || c == 3 ) { std::cout << c+1 << std::endl; return 0; } uint64_t t=10; uint64_t w = 1;// t = 10^w while( c/t >= 1) { ++w; t *= 10; } uint64_t xk = 1, xk1 = 1, x2k = 1, x2k1 = 2; k = 1; while( x2k1 < c ) { xk = x2k; xk1 = x2k1; x2k = xk*(2*xk1-xk); x2k1 = xk1*xk1 + xk*xk; k *= 2; } uint64_t max_k = t/10*15; a = xk; b = xk1; fk = a+b; k += 2; bool found = false; while( ( fmod( fk, t ) != c ) && ( k<max_k ) ) { a = b; b = fk; fk = fmod(a+b, t ); ++k; } if( ( fmod( fk, t ) != c ) || (k==max_k)) { std::cout << "NIE" << std::endl; } else { std::cout << k << std::endl; } return 0; } |
English