zoukankan      html  css  js  c++  java
  • marcool 0200 互质二元组 数论

    题意:给出N个整数A1A2,……,AN,统计满足i<jAiAj互质的二元组(ij)的数量。

    对于100%的数据,1 ≤ N ≤ 100000,1 ≤ Ai ≤ 1000000。

     

    思路: 因为Ai比较小 所以我们用num[i]统计n个数中i的个数

    然后先求出 分别以2~1000000为公约数的有多少对

    再求出以2~1000000为最大公约数的有多少对

    最后用n*(n-1)/2减去总对数

     

     1 #include<iostream>
     2 #include<cstring>
     3 #include<cstdio>
     4 #include<cmath>
     5 #define MAXM 1000000
     6 #define MAXN 110000
     7 long long num[MAXM+1];
     8 long long ans[MAXM+1];
     9 int n;
    10 void solve()
    11 {
    12     int i,x;
    13     for(x=2;x<=MAXM;x++)
    14         for(i=x;i<=MAXM;i+=x)
    15             ans[x]+=num[i];
    16     for(x=2;x<=MAXM;x++)
    17         ans[x]=ans[x]*(ans[x]-1)/2;
    18     for(x=MAXM;x>1;x--)
    19         for(i=2*x;i<=MAXM;i+=x)
    20             ans[x]-=ans[i];
    21     long long s=0;
    22     for(x=2;x<=MAXM;x++)
    23         s+=ans[x];
    24     s=(long long)n*(n-1)/2-s;
    25     printf("%lld\n",s);
    26 }
    27         
    28 int main()
    29 {
    30     memset(num,0,sizeof(num));
    31     int x,i;
    32     scanf("%d",&n);
    33     for(i=1;i<=n;i++)
    34     {
    35         scanf("%d",&x);
    36         num[x]++;
    37     }
    38     solve();
    39     return 0;
    40 }

     

  • 相关阅读:
    Java ES api 查询例子
    leveldb学习
    Viewstamp Replication协议
    PacificA协议
    vhost架构
    数据分片方法
    常见分布式存储系统架构分析
    数据存储(B+树 vs LSM树)
    paxos算法理解
    Raft协议理解
  • 原文地址:https://www.cnblogs.com/myoi/p/2602610.html
Copyright © 2011-2022 走看看