?題意:求ai在n個數中,ai可以整除的數有多少個,不包括ai自己。
分析:暴力寫需要n^2的時間復雜度,此時想一下預處理每個數的倍數,約數和倍數是有關系的,把每個數的倍數都加上1.
#include<bits/stdc++.h>using namespace std;const int N = 1e6 + 10;
int s[N];
int cnt[N];
int a[N];int main()
{int n;cin>>n;for(int i=1;i<=n;i++) {cin>>a[i];cnt[a[i]]++;}for(int i=1;i<N;i++)//這兩重循環是O(nlogn)的{for(int j=i;j<N;j+=i){s[j]+=cnt[i];}}for(int i=1;i<=n;i++) cout<<s[a[i]]-1<<endl;return 0;
}