module main; // https://ja.wikipedia.org/wiki/定規とコンパスによる作図 より import std; // n個からk個取る組み合わせ T[][] comb(T)(in T[] arr, in int k) { if (k == 0) return [[]]; typeof(return) result; foreach (immutable i, immutable x; arr) foreach (suffix; arr[i + 1 .. $].comb(k - 1)) result ~= x ~ suffix; return result; } void main() { // 入力 long A = readln.chomp.to!long; // 答えの計算 int ans = 0; auto fermat = [3L, 5, 17, 257, 65537]; // フェルマー素数 for (long f = 4; f <= A; f <<= 1) ans++; foreach (k; 1 .. 6) { foreach (c; comb(fermat, k)) { for (long f = reduce!"a * b"(1L, c); f <= A; f <<= 1) ans++; } } // 答えの出力 writeln(ans); }