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を重複させないため.