解いた問題

5/23/2012

SRM406 Div2 Medium

500

やるだけ



class FactoVisors {
public:
  int getNum(vector <int> D, vector <int> M)
  {
    set<lli> ns[M.size()];
    for (int i = 0; i < (int)M.size(); ++i) {
      for (lli j = 1; j * j <= M[i]; ++j) {       
        if (M[i] % j == 0) {
          ns[i].insert(j);
          ns[i].insert(M[i] / j);
        }
      }
    }

    set<lli> cand;

    FOR (i, ns[0]) {
      bool flg = true;
      for (int j = 0; j < (int)M.size(); ++j) {
        flg = flg && ns[j].count(*i);
      }
      if (flg) cand.insert(*i);
    }

    int ret = 0;

    FOR (i, cand) {
      bool flg = true;
      for (int j = 0; j < (int)D.size(); ++j) {
        flg = flg && *i % D[j] == 0;
      }
      ret += flg;
    }

    return ret;
  }
};