bool PrimeSieve::NextCandidate(Integer &c) { m_next = std::find(m_sieve.begin()+m_next, m_sieve.end(), false) - m_sieve.begin(); if (m_next == m_sieve.size()) { m_first += m_sieve.size()*m_step; if (m_first > m_last) return false; else { m_next = 0; DoSieve(); return NextCandidate(c); } } else { c = m_first + m_next*m_step; ++m_next; return true; } }
bool PrimeSieve::NextCandidate(Integer &c) { bool safe = SafeConvert(std::find(m_sieve.begin()+m_next, m_sieve.end(), false) - m_sieve.begin(), m_next); assert(safe); if (m_next == m_sieve.size()) { m_first += long(m_sieve.size())*m_step; if (m_first > m_last) return false; else { m_next = 0; DoSieve(); return NextCandidate(c); } } else { c = m_first + long(m_next)*m_step; ++m_next; return true; } }