//Jan Omeljaniuk
//
#include <list>
#include <stack>
#include <queue>
#include <vector>
#include <string>
#include <bitset>
#include <cassert>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <sstream>
#define unm unsigned long long int
#define nm long long int
#define uint unsigned int
using namespace std;
inline unm period(unm x) {
if(x==10)
return 60;
if(x==100)
return 300;
return 15 * x/10;
}
bool exists(unm x) {
//cerr << "Exists(" << x << ")\n ";
if( x >= 100ULL && ( (x-100ULL)%8ULL == 0ULL || (x-100ULL)%8ULL == 2ULL ) )
return false;
if( x >= 1002ULL && (x-1002ULL)%16ULL == 0ULL )
return false;
if( x >= 10002ULL && (x-10002ULL)%32ULL == 0ULL )
return false;
return true;
}
string n;
unm test(string v){
unm sz = v.size();
unm modulo = 1;
unm n = atoll(v.c_str());
while(sz--)
modulo*=10;
//cerr << modulo << "\n";
//cerr << period(modulo);
unm last=1, prelast=0,temp;
bool f = false;
for(unm i=2;i<=period(modulo)+1;++i){
temp = (last+prelast)%modulo;
if(temp>=modulo/10)
f=true;
//temp = last+prelast;
prelast = last;
last = temp;
//if(i==1525)
//cerr << i << ". " << temp <<"\n";
//if(temp == x){
if(f&&temp == n){
//cerr << temp << "\n";
return i;
}
}
return 0;
}
int main(){
ios_base::sync_with_stdio(false);
cin >> n;
if(n[0]=='0'||exists(atoll(n.c_str()))){
nm temp = test(n);
if(temp == 0){
cout << "NIE\n";
return 0;
}
cout << temp << "\n";
} else {
cout << "NIE\n";
}
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 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | //Jan Omeljaniuk // #include <list> #include <stack> #include <queue> #include <vector> #include <string> #include <bitset> #include <cassert> #include <cstdlib> #include <iostream> #include <algorithm> #include <sstream> #define unm unsigned long long int #define nm long long int #define uint unsigned int using namespace std; inline unm period(unm x) { if(x==10) return 60; if(x==100) return 300; return 15 * x/10; } bool exists(unm x) { //cerr << "Exists(" << x << ")\n "; if( x >= 100ULL && ( (x-100ULL)%8ULL == 0ULL || (x-100ULL)%8ULL == 2ULL ) ) return false; if( x >= 1002ULL && (x-1002ULL)%16ULL == 0ULL ) return false; if( x >= 10002ULL && (x-10002ULL)%32ULL == 0ULL ) return false; return true; } string n; unm test(string v){ unm sz = v.size(); unm modulo = 1; unm n = atoll(v.c_str()); while(sz--) modulo*=10; //cerr << modulo << "\n"; //cerr << period(modulo); unm last=1, prelast=0,temp; bool f = false; for(unm i=2;i<=period(modulo)+1;++i){ temp = (last+prelast)%modulo; if(temp>=modulo/10) f=true; //temp = last+prelast; prelast = last; last = temp; //if(i==1525) //cerr << i << ". " << temp <<"\n"; //if(temp == x){ if(f&&temp == n){ //cerr << temp << "\n"; return i; } } return 0; } int main(){ ios_base::sync_with_stdio(false); cin >> n; if(n[0]=='0'||exists(atoll(n.c_str()))){ nm temp = test(n); if(temp == 0){ cout << "NIE\n"; return 0; } cout << temp << "\n"; } else { cout << "NIE\n"; } return 0; } |
English