小优化
对y老师的代码的小优化,问题求其他的数中有多少个是它的约数。计算s数组时,故只需统计输入的数据。
C++ 代码
#include <iostream>
using namespace std;
const int N = 1000010;
int a[N], cnt[N], s[N];
int main()
{
int n;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> a[i];
cnt[a[i]]++; //a[i]的个数
}
for (int i = 1; i < N; i++) //预处理约数为a[i]的数
{
for (int j = i; j < N; j += i)
{
if (cnt[i]) s[j] += cnt[i]; //只统计输入的数据
}
}
for (int i = 0; i < n; i++) cout << s[a[i]] - 1 << endl; //不包括自己
}
把 if (cnt[i]) 移到第二次循环外面会更快