题目链接

题给代码可以转化为下面的公式

然后用F[n]记录公约数为n的(a[i],a[j])对数,用f[n]记录最大公约数为n的(a[i],a[j])对数

之后枚举最大公约数d

至于求F[n],可以先将1~10000全部因数分解,用num[i]记录约数中包含i的a[x]的个数。对每一个a[i],其每一个约数都对对应的num[i]贡献了1 。显然,F[n]=num[n]*num[n]

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;

;
const int maxn=1e6;

];
];
];

void init()
{
    mu[]=;
    ;
    ;i<=maxn;i++)
    {
        if(!check[i])
        {
            prime[tot++]=i;
            mu[i]=-;
        }
        ;j<tot;j++)
        {
            if(i*prime[j]>maxn) break;
            check[i*prime[j]]=true;
            )
            {
                mu[i*prime[j]]=;
                break;
            }
            else
            {
                mu[i*prime[j]]=-mu[i];
            }
        }
    }
}

int n;
];
LL num[];
vector<];
LL f[];
LL F[];

void init1()
{
    ;i<=;i++)
    {
        int j;
        ;j*j<i;j++)
            )
            {
                fac[i].push_back(j);
                fac[i].push_back(i/j);
            }
        if(j*j==i) fac[i].push_back(j);
        sort(fac[i].begin(),fac[i].end());
    }
}
void add(int x)
{
    ;i<fac[x].size();i++)
        num[fac[x][i]]++;
}

int gcd(int a,int b)
{
    return b? gcd(b,a%b): a;
}

//int calc()
//{
//    int res=0;
//    for(int i=1; i<=n; i++)
//        for(int j=1; j<=n; j++)
//        {
//            res+=gcd(a[i],a[j])*(gcd(a[i],a[j])-1);
//            res%=10007;
//        }
//    return res;
//}

int main()
{
    init();
    init1();
    while(~scanf("%d",&n))
    {
        memset(num,,sizeof(num));
        memset(f,,sizeof(f));
        ;i<=n;i++)
        {
            scanf("%d",&a[i]);
            add(a[i]);
        }
        LL ans1=,ans2=;
        ;i<=;i++)
            F[i]=num[i]*num[i];
        ;i<=;i++)
            ;i*j<=;j++)
                f[i]=(f[i]+mu[j]*F[i*j])%mod;
        ;i<=;i++)
        {
            ans1=(ans1+f[i]*i*i)%mod;
            ans2=(ans2+f[i]*i)%mod;
        }
        printf("%lld\n",((ans1-ans2)%mod+mod)%mod);
//        cout<<calc()<<endl;
    }
}

hdu 5212 : Code【莫比乌斯】的更多相关文章

  1. hdu.5212.Code(莫比乌斯反演 && 埃氏筛)

    Code Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submi ...

  2. HDU 5212 Code (莫比乌斯反演)

    题意:给定上一个数组,求 析: 其中,f(d)表示的是gcd==d的个数,然后用莫比乌斯反演即可求得,len[i]表示能整队 i 的个数,可以线性筛选得到, 代码如下: #pragma comment ...

  3. HDU 5212 Code【莫比乌斯反演】

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5212 题意: 给定序列,1≤i,j≤n,求gcd(a[i],a[j])∗(gcd(a[i],a[j] ...

  4. hdu 5212 Code 筛法或者莫比乌斯

    Code Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Problem Des ...

  5. HDU 5212 Code

    筛法. 统计所有 [数] 的所有 [倍数] 的 [数] 的个数,即 i 的所有倍数 i, 2i, 3i, 4i...个数为 dp[i], 则所有 倍数两两结合共有 dp[i] * dp[i] 个. 此 ...

  6. POJ3094 Sky Code(莫比乌斯反演)

    POJ3094 Sky Code(莫比乌斯反演) Sky Code 题意 给你\(n\le 10^5\)个数,这些数\(\le 10^5\),问这些这些数组成的互不相同的无序四元组(a,b,c,d)使 ...

  7. HDU 5212 莫比乌斯反演

    Code Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submis ...

  8. POJ Sky Code 莫比乌斯反演

    N. Sky Code Time Limit: 1000ms Case Time Limit: 1000ms Memory Limit: 65536KB   64-bit integer IO for ...

  9. hdu 4746 Mophues 莫比乌斯反演+前缀和优化

    Mophues 题意:给出n, m, p,求有多少对a, b满足gcd(a, b)的素因子个数<=p,(其中1<=a<=n, 1<=b<=m) 有Q组数据:(n, m, ...

随机推荐

  1. ORACLE内存管理之ASMM AMM

    ORACLE ASMM ORACLE AMM ASMM转换至AMM AMM转换至ASMM

  2. fedora bash shell 为什么不能使用ctrl+c了?

    无法使用ctrl+c? 原来是因为, 在shell中, 为了选择和复制粘贴文字内容的方便, 对shell的快捷键进行了设置, 将复制设置为 ctrl+c了, 将zhantie设置为ctrl+v了 所以 ...

  3. java 操作hdfs(连接HDFS)

    FileSystem fs = null; Configuration conf = null; @Before public void init() throws Exception{ conf = ...

  4. 【MongoDB】 windows下建立双机主从

    [双机配置] 服务端: 两台 Dell R730 双路E5 服务器 使用一个内网环境,网段20, ping 测试互通 主服ip: 192.168.20.176: 27017 从服ip: 192.168 ...

  5. Delphi XE2 之 FireMonkey 入门(6) - TLine、TEllipse、TCircle、TPie、TArc、TRectangle、TRoundRect、TCalloutRectangle

    它们都是继承自 TShape 类, 共同拥有如下属性: Fill            : TBrush;      //填充 Stroke          : TBrush;      //边线( ...

  6. python实现建立tcp通信

    实现代码如下: #tcp协议通信import socketclass TcpConnect: def get_tcp(self,ip,port,message): #实例化一个基于tcp的socket ...

  7. 【GTS】关于GtsTetheringTestCases模块的几个失败项

    GTS---关于GtsTetheringTestCases模块的几个失败项 1.run gts -m GtsTetheringTestCases -t com.google.android.tethe ...

  8. Mac018--VisualBox & ubuntu 安装

    一.安装虚拟机VMware 参考博客:https://blog.csdn.net/u013142781/article/details/50529030 Step1:下载ubuntu镜像 注:选择Ub ...

  9. Nginx配置之rewrite、proxy_pass、upstream、location

    如图,这是Nginx的配置文件nginx.conf中的一段配置代码. 在http段中定义了一个名为webservers的upstream模块,主要用于负载均衡. 在server模块中,定义了一个loc ...

  10. python对excel表格进行操作

    python 对 EXCEL 进行操作 背景:对excel表格中某一列进行base 64解码操作,由于数据量比较庞大,就考虑用Python代码完成. 首先,分析整个文件操作中分为三步,第一步,对需要解 ...