#include #include #include #include #include #include #include #include #include #include #include #include //INT_MIN/MAX using namespace std; #define FOR(i,s,e) for(int (i)=(s);(i)<(e);(i)++) #define FORR(i,s,e) for(int (i)=(s);(i)>(e);(i)--) #define MOD 1000000007 #define llong long long #define debug(x) cout<<#x<<": "<> n; calcomb(); llong count = 0; /* 桁数発見 */ int keta; FOR(i, 0, 26) { keta = i; count += exsum(keta); if (count >= n) { break; } } count = n - (count - exsum(keta)); int cc = 0; string ans=""; /* 0が3、1が5 */ FOR(bit, 1, (1 << keta + 1)) { int num = bit; int check3 = 0; while (num != 0) { /* 後の3の倍数かチェックのため */ if (num & 1) check3++; num = num >> 1; } /* 最下位は必ず5 */ if (!(bit & 1)) continue; if (check3 % 3 != 0) continue; cc++; if (cc == count) { FORR(i,keta-1,-1) { if (bit&(1 << i)) ans += "5"; else ans += "3"; } cout << ans << endl; return 0; } } return 0; }