Problem:
FizzBuzz

FizzBuzzとは、1以上の整数を順に、以下のルールに従って発言していくゲームである。

3で割り切れる時には「Fizz」

5で割り切れる時には「Buzz」

3と5の両方で割り切れる時には「FizzBuzz」

それ以外の時はその数字

ゲームの進行状況の例を以下に示す。

1, 2, Fizz, 4, Buzz, Fizz, 7, 8, Fizz, Buzz, 11, Fizz, 13, 14, FizzBuzz, 16, …

得られた発言を1つの文字列に結合し得られた文字列をFizzBuzz Stringと呼ぶ。インデックスsが与えられるので、FizzBuzz Stringのs文字目から20文字を出力せよ。但し、インデックスは1から始まるものとし、得られた文字列の長さは十分に大きい（s+20以上）としてよい。

Input

入力は以下の形式で与えられる

s

Constraints

sは整数である

1 ≤ s ≤ 1018

Output

FizzBuzz Stringのs文字目から20文字を1行に出力せよ

Sample Input 1

1

Output for the Sample Input 1

12Fizz4BuzzFizz78Fiz

Sample Input 2

20

Output for the Sample Input 2

zzBuzz11Fizz1314Fizz

Sample Input 3

10000000000

Output for the Sample Input 3

93FizzBuzz1418650796

Solution in JAVA (judge verdict: Accepted)

import java.util.*;
import java.lang.*;
import java.math.*;
import java.io.*;
import static java.lang.Math.*;
import static java.util.Arrays.*;
import static java.util.Collections.*;

// FizzBuzz
// 2012/09/19
public class Main{
	Scanner sc=new Scanner(System.in);

	long n;

	void run(){
		n=sc.nextLong();
		solve();
	}

	void solve(){
		long left=0, right=(long)1e17;
		for(; left<right-1;){
			long mid=(left+right)/2;
			if(length(mid)<n){
				left=mid;
			}else{
				right=mid;
			}
		}

		int margin=(int)(n-length(right-1)-1);
		String ans="";
		for(int i=0; i<20; i++){
			ans+=fizzBuzz(right+i);
		}
		println(ans.substring(margin, margin+20));
	}

	long length(long n){
		long length=0;
		long b=1;
		for(int i=1; i<=18; i++){
			// (left, right]
			long left=b-1, right=min(b*10-1, n);
			if(left>=right){
				break;
			}
			long nFizz=right/3-left/3;
			long nBuzz=right/5-left/5;
			long nFizzBuzz=right/15-left/15;
			long nString=nFizz+nBuzz-nFizzBuzz;
			length+=(right-left-nString)*i+nFizz*4+nBuzz*4;
			b*=10;
		}
		return length;
	}

	String fizzBuzz(long n){
		if(n%15==0){
			return "FizzBuzz";
		}else if(n%3==0){
			return "Fizz";
		}else if(n%5==0){
			return "Buzz";
		}else{
			return ""+n;
		}
	}

	void println(String s){
		System.out.println(s);
	}

	public static void main(String[] args){
		new Main().run();
	}
}