SRM 471 PrimeContainers

#include <set>
#include <iostream>
#include <string>
#include <vector>
#include <sstream>
using namespace std;

class PrimeContainers {
public:
  int containerSize(int N) {
    int ret = 0;
  int i = 1;
  set<int> s;

  while(i){
   if(i > N) break;
   s.insert( ( N / i ) );
   i = i << 1;
  }
  set<int>::iterator it = s.begin();
  while( it != s.end() ){
   cout << *it << endl;
   if( isPrime( *it ) ) ret++;
   ++it;
  }
    return ret;
  }

  bool isPrime(int n){
    int i;
  if(n < 2)
        return false;
    else if(n == 2)
        return true;

    if(n % 2 == 0)
        return false;

    for(i = 3; i * i <= n; i += 2)
         if(n % i == 0)
            return false;
    return true;
  }
};

エラトステネスの篩とかわすれてて困った.setにしたのは1を重複させないため.