1 条题解
-
0Guest LV 0
-
0
//一开始还以为是一个很简单的题 从1到n就这样扫 结果wa了九个点
//想想这是到数论题 光靠暴力是不行的
#include<bits/stdc++.h>
using namespace std;
int n,A[1000000],B[1000000];
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>A[i];
}
for(int i=1;i<=n;i++)
{
int k=0;
for(int j=1;j<=n;j++)
{
if(A[i]%A[j]==0)
{
B[i]=k;
k++;
}
}
}
for(int i=1;i<=n;i++) cout<<B[i]<<endl;
return 0;
}//30分代码
——————————————————————————分割线——————————————————————————————————————————————
//我们可以从1到Max{A[i]}开始刷,凡是这个数的倍数,那么答案就加上它的个数。记住,最后要把自己本身减去。
#include<math.h>
#include<algorithm>
#include<iostream>
using namespace std;
int n,A[1000100],B[1000100],C[1000100];
int Max=0;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>A[i];
B[A[i]]++;
Max=max(Max,A[i]);
}
for(int i=1;i<=Max;i++)
{
if(B[i]==0) continue;//若该数不存在 就往下跳
for(int j=i;j<=Max;j+=i)
{
C[j]+=B[i];
}
}
for(int i=1;i<=n;i++) cout<<C[A[i]]-1<<endl;
return 0;
}
//来自某届石光中学信竞苟蒻学长 愿看到此文的你 努力码题 为校争光
- 1