上次面试中最后一道题跟计算素数有关。尽管我写出了总体思路,但实质上并不会写算素数的算法。今天在看事件机制的资料的时候,看到一个求素数的算法。特地记录下来,以备用。 // // Helper fn to test if number p is prime: // Try dividing by all primes found so far, up to SQRT(p). // BOOL CPrimeCalculator::IsPrime(UINT p) { PRIMELIST::iterator it; for (it=m_primes.begin(); it!=m_primes.end(); it++) { UINT factor = *it; if (p%factor == 0) { // if divisible: return FALSE; // ..it's not prime } if (factor*factor > p) // if no more primes to try: return TRUE; // ..number must be prime } // Should only get here when p==2 (list is empty). ASSERT(p==2); return TRUE; }