链接:http://http://acm.hdu.edu.cn/status.php?pid=5212&status=5
容斥应用,也可用莫比乌斯反演
先上容斥的代码
#include <functional>
#include <algorithm>
#include <string.h>
#include <ctype.h>
#include <stdio.h>
#include <string>
#include <vector>
#include <queue>
#include <stack>
#include <cmath>
#include <set>
#include<cstdlib>
#include<math.h>
#include<iostream>
#include<limits.h>
#define ll long long
#define ull unsigned long long
#define clr(a) memset(a,0,sizeof(a))
#define maxn 10000
#define mod 10007
using namespace std;
int a[maxn+5];
int ha[maxn+5];
int v[maxn+5];
int main()
{
int n;
while(~scanf("%d",&n))
{
clr(ha);
clr(v);
for(int i = 1; i <= n; i++)
{
scanf("%d",a+i);
ha[a[i]]++;
}
int ans = 0;
for(int i = maxn; i >= 2; i--)
{
for(int j = i; j <=maxn; j+=i)
{
v[i] += ha[j];
}
v[i]*=v[i];
for(int j = i+i; j <= maxn; j+=i)
v[i] -= v[j];
ans = (ans+(ll)(i*(i-1)%mod)*(v[i]%mod))%mod;
ans %= mod;
}
printf("%d\n",ans);
}
}
莫比乌斯的改天补上