Interviewstreet には、UnfriendlyNumbers という問題があります。問題は次のようになります -
1 つの友好的な番号と N の非友好的な番号があります。友好的な数を正確に分割し、非友好的な数を分割しない数がいくつあるかを見つけたいと考えています。サンプル入力: 8 16 2 5 7 4 3 8 3 18 サンプル出力: 1
私が想像できるすべてのテストケースは正しく実行されますが、何らかの理由で、Web サイトは一連のテストケースに対して正しくないと見なします。コード/ロジックにエラーはありますか?
void get_factors(unsigned long n, vector<unsigned long> &factors)
{
unsigned long sqrt = pow(n, 0.5);
for (unsigned long i = 1; i < sqrt; i++) {
if (n%i == 0) {
factors.push_back(i);
factors.push_back(n/i);
}
}
if (n%sqrt == 0) {
factors.push_back(sqrt);
}
}
int
main(int argc, char *argv[])
{
unsigned int n;
unsigned long k, j;
cin >> n >> k;
if (n == 0 || k == 0) {
cout << 0 << endl;
return 0;
}
set<unsigned long> unfriendly;
for (int i = 0; i < n; i++) {
cin >> j;
unfriendly.insert(j);
}
vector<unsigned long> factors;
get_factors(k, factors);
unsigned int count = factors.size();
for (int i = 0; i < factors.size(); i++) {
for (set<unsigned long>::iterator it = unfriendly.lower_bound(factors[i]);
it != unfriendly.end();
it++)
{
if (*it % factors[i] == 0) {
count--;
break;
}
}
}
cout << count;
}