1 条题解

  • 0
    @ 2019-09-26 13:20:19

    //一开始还以为是一个很简单的题 从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

信息

难度
8
分类
数学数论 点击显示
标签
递交数
16
已通过
4
通过率
25%
上传者