hdu 5212 : Code【莫比乌斯】
题给代码可以转化为下面的公式

然后用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【莫比乌斯】的更多相关文章
- hdu.5212.Code(莫比乌斯反演 && 埃氏筛)
Code Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submi ...
- HDU 5212 Code (莫比乌斯反演)
题意:给定上一个数组,求 析: 其中,f(d)表示的是gcd==d的个数,然后用莫比乌斯反演即可求得,len[i]表示能整队 i 的个数,可以线性筛选得到, 代码如下: #pragma comment ...
- 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] ...
- hdu 5212 Code 筛法或者莫比乌斯
Code Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Problem Des ...
- HDU 5212 Code
筛法. 统计所有 [数] 的所有 [倍数] 的 [数] 的个数,即 i 的所有倍数 i, 2i, 3i, 4i...个数为 dp[i], 则所有 倍数两两结合共有 dp[i] * dp[i] 个. 此 ...
- POJ3094 Sky Code(莫比乌斯反演)
POJ3094 Sky Code(莫比乌斯反演) Sky Code 题意 给你\(n\le 10^5\)个数,这些数\(\le 10^5\),问这些这些数组成的互不相同的无序四元组(a,b,c,d)使 ...
- HDU 5212 莫比乌斯反演
Code Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submis ...
- POJ Sky Code 莫比乌斯反演
N. Sky Code Time Limit: 1000ms Case Time Limit: 1000ms Memory Limit: 65536KB 64-bit integer IO for ...
- hdu 4746 Mophues 莫比乌斯反演+前缀和优化
Mophues 题意:给出n, m, p,求有多少对a, b满足gcd(a, b)的素因子个数<=p,(其中1<=a<=n, 1<=b<=m) 有Q组数据:(n, m, ...
随机推荐
- 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_06 Properties集合_3_Properties集合中的方法load
键值对文件,读取到集合中来使用 分隔符也可以用空格 读出来乱码
- 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_02 递归_4_练习_递归打印多级目录
递归所有的文件夹,并把文件都输出出来. 在最上面打印目录的名称
- list、tuple、dict加*星号
*相当于解压的作用,当list中只有一个元素时,利用*作用相当于直接去[],去[]后的数据类型是字符串. _list = [1,2,3] _tuple = (1,2,3) _dict = {1:'a' ...
- PHP 常用函数-url函数
urlencode 和 rawurlencode urlencode 和 rawurlencode 两个函数都用来编码 URL 字符串.除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后 ...
- 并查集入门(hdu1232“畅通工程”)
在学习并查集之前,首先需要明白基本的并查集可以完成的功能.并查集主要是用于处理不相交集合的合并问题.它是一种基础算法,在离散数学中,可以利用并查集求一个图的连通分支,利用其这个特性可以为我们解决一系列 ...
- new Date() 对象及方法:
在别人的代码中见了两回 new Date().toLocaleString(),查了才知道,toLocaleString()是 根据本地时间格式,把 Date 对象转换为字符串.于是好奇new Dat ...
- airtest自动化中的poco+python连接手机实现ui自动化
airtest:http://airtest.netease.com/docs/docs_AirtestIDE-zh_CN/index.html官网地址 AirtestIDE:跨平台的UI自动化测试编 ...
- 如何理解ajax的同步和异步?
对于如下一段代码: var dataJson = {"ABC":'testABC'}; $.ajax({ url: "/MonkeyServ ...
- web service接口 wsdl和asmx有什么区别
没有区别,只是后缀名的区别.Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立 ...
- Java-多线程第四篇线程池
1.什么是线程池. 线程池在系统启动的时候即创建大量的空闲的线程,程序将一个Runnable对象或者Callable对象传给线程池,线程池就会启动一个线程来执行它们的run()或者call()方法,当 ...