在 interviewstreet 上有一个叫做 UnfriendlyNumbers 的问题。问题是这样的——
有1个友好号码和N个不友好号码。我们想找出有多少数字正好整除友好数字,但不整除任何不友好数字。样本输入:8 16 2 5 7 4 3 8 3 18 样本输出:1
我可以想象的所有测试用例都正确执行,但由于某种原因,网站认为一组测试用例不正确。你们在代码/逻辑中看到任何错误吗?
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;
}