(Analysis by Benjamin Qi)

Let $f(n)$ denote the $n$-th number spoken. Within the first 15 turns exactly eight numbers are spoken; in fact, this is true for any 15 consecutive turns. Therefore, we should be able to calculate $f(n)$ recursively. For $n>8,$

Defining $num=\left\lfloor \frac{n-1}{8}\right\rfloor,$ we can rewrite this as equation as
$$f(n)=f(n-8\cdot num)+15\cdot num,$$
where $1\le n-8\cdot num\le 8.$ When $n\le 8,$ we can easily calculate $f(n)$ via brute force, so we're done. My code follows:

#include <bits/stdc++.h>
using namespace std;

typedef vector<int> vi; 
#define FOR(i,a,b) for (int i = (a); i < (b); ++i)
#define F0R(i,a) FOR(i,0,a)
#define ROF(i,a,b) for (int i = (b)-1; i >= (a); --i)
#define R0F(i,a) ROF(i,0,a)
#define trav(a,x) for (auto& a: x)
#define pb push_back
void setIO(string name) {

vi stor; // first 8 numbers
bool ok(int x) { return x%3 && x%5; } // not fizz or buzz
int dumb(int N) { // get f(n) slowly
	for (int i = 1;;++i) if (ok(i)) {
		N --;
		if (N == 0) return i;
int smart(int N) { // get f(n) quickly
	int num = (N-1)/8;
	return stor[N-8*num-1]+15*num;
int main() {
	FOR(i,1,16) if (ok(i)) stor.pb(i);
	int N; cin >> N;
	cout << smart(N) << "\n";