//(桁数, 上限, 桁合計mod3, 末尾mod5)を状態とした桁DP + 多倍長かな~→面倒くさい //桁数MAX = 25より、3と5で作る数の候補は高々2^25 + 2^24 + … + 2^0 = 2^26 - 1通り //半数列挙をすれば余裕そう→今回は全探索してみる #include using namespace std; void output( int n, int i ){ for( int j = n - 1; j >= 0; j-- ){ cout << (((i >> j) % 2) ? 5 : 3); } cout << endl; } int main() { int x; cin >> x; x--; int n; //桁数 for( int n = 1; n < 26; n++ ){ for( int i = 0; i < (1 << n); i++ ){ if( i % 2 == 0 ) continue; int digitSum = 0; for( int j = 0; j < n; j++ ) digitSum += (((i >> j) % 2) ? 5 : 3); if( digitSum % 3 == 0 ){ if( !x ){ output(n, i); return 0; } x--; //カウントダウン } } } return 0; }