HDU 5212 莫比乌斯反演
Code
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 1306 Accepted Submission(s): 540
The function:
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;
}
For each case:
The first line contains an integer N(1≤N≤10000).
The next line contains N integers a1,a2,...,aN(1≤ai≤10000).
Print an integer,denoting what the function returns.
1 3 4 2 4
gcd(x,y) means the greatest common divisor of x and y.
题意:给定序列1≤i,j≤n,求gcd(a[i],a[j])∗(gcd(a[i],a[j])−1)之和。
思路:倍数莫比乌斯反演。
代码:
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 1e5 + ;
const int mod=;
int t;
//线性筛法求莫比乌斯函数
bool vis[N + ];
int pri[N + ];
int mu[N + ];
int sum[N]; void mus() {
memset(vis, , sizeof(vis));
mu[] = ;
int tot = ;
for (int i = ; i < N; i++) {
if (!vis[i]) {
pri[tot++] = i;
mu[i] = -;
}
for (int j = ; j < tot && i * pri[j] < N; j++) {
vis[i * pri[j]] = ;
if (i % pri[j] == ) {
mu[i * pri[j]] = ;
break;
}
else mu[i * pri[j]] = -mu[i];
}
}
sum[]=;
for(int i=;i<N;i++) sum[i]=sum[i-]+mu[i];
}
int n,m,k; int a[N];
int b[N];
int F[N];
int main() {
mus();
while(scanf("%d",&n)==){
int ma=;
memset(F,, sizeof(F));
memset(b,, sizeof(b));
for(int i=;i<n;i++){
scanf("%d",&a[i]);
b[a[i]]++;//b[a[i]]的个数
ma=max(ma,a[i]);
}
for(int i=;i<=ma;i++)
for(int j=i;j<=ma;j+=i) F[i]+=b[j];//在范围内i的倍数的个数
ll ans=;
for(int i=;i<=ma;i++){
ll res=;
for(int j=i;j<=ma;j+=i){
if(!F[j]) continue;
res+=1ll*mu[j/i]*F[j]*F[j]%mod;//公约数均为i
}
ans=(ans+res*i%mod*(i-))%mod;//同时乘上i*i-1
}
ans%=mod;
ans+=mod;
ans%=mod;
printf("%lld\n",ans);
}
return ;
}
HDU 5212 莫比乌斯反演的更多相关文章
- HDU 4746 (莫比乌斯反演) Mophues
这道题看巨巨的题解看了好久,好久.. 本文转自hdu4746(莫比乌斯反演) 题意:给出n, m, p,求有多少对a, b满足gcd(a, b)的素因子个数<=p,(其中1<=a<= ...
- HDU 1695 (莫比乌斯反演) GCD
题意: 从区间[1, b]和[1, d]中分别选一个x, y,使得gcd(x, y) = k, 求满足条件的xy的对数(不区分xy的顺序) 分析: 虽然之前写过一个莫比乌斯反演的总结,可遇到这道题还是 ...
- GCD HDU - 1695 莫比乌斯反演入门
题目链接:https://cn.vjudge.net/problem/HDU-1695#author=541607120101 感觉讲的很好的一个博客:https://www.cnblogs.com/ ...
- hdu 1695(莫比乌斯反演)
GCD Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- HDU 6053(莫比乌斯反演)
题意略. 思路:首先想到暴力去扫,这样的复杂度是n * min(ai),对于gcd = p,对答案的贡献应该是 (a1 / p) * (a2 / p) * .... * (an / p),得出这个贡献 ...
- hdu 4746Mophues[莫比乌斯反演]
Mophues Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 327670/327670 K (Java/Others) Total ...
- 算术 HDU - 6715 (莫比乌斯反演)
大意: 给定$n,m$, 求$\sum\limits_{i=1}^n\sum\limits_{j=1}^m\mu(lcm(i,j))$ 首先有$\mu(lcm(i,j))=\mu(i)\mu(j)\m ...
- HDU 4746 莫比乌斯反演+离线查询+树状数组
题目大意: 一个数字组成一堆素因子的乘积,如果一个数字的素因子个数(同样的素因子也要多次计数)小于等于P,那么就称这个数是P的幸运数 多次询问1<=x<=n,1<=y<=m,P ...
- HDU 5382 莫比乌斯反演
题目大意: 求S(n)的值 n<=1000000 这是官方题解给出的推导过程,orz,按这上面说的来写,就不难了 这里需要思考的就是G(n)这个如何利用积性函数的性质线性筛出来 作为一个质数,那 ...
随机推荐
- RuntimeBroker ClipboardBroker EoP
datetime: 2017.04.28 漏洞简介 随着沙箱技术的普及,现在主流的操作系统及软件都开始支持沙箱,以此来缓解层出不穷的远程代码执行漏洞对系统造成的危害.AppContainer是自Win ...
- npm创建react项目
1:win+R 输入cmd ,打开cmd面板 2:安装cnpm npm install -g cnpm --registry=https://registry.npm.taobao.org 3:安装r ...
- July 26th 2017 Week 30th Wednesday
A man can't ride your back unless it is bent. 你的腰不弯,别人就不能骑在你的背上. Have you ever ride a horse, or ride ...
- 从0开始学CentOS7(1)
首先,先来几句简介吧.. java开发一枚,总觉得自己的技术提升缓慢... 最近看到同事有在论坛发发自己的心得什么的...我脑中晃出的灵光就是:好记性不如烂笔头,试试吧~ 好了,正式开始了..cent ...
- C#图解教程读书笔记(第9章 语句)
文件头的Using是Using指令,不是using语句 using (TextWriter tw = File.CreateText("xixi.txt")) { tw.Write ...
- 51nod 1019 逆序数(逆序数+离散化)
在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序.一个排列中逆序的总数就称为这个排列的逆序数. 如2 4 3 1中,2 1,4 3,4 1,3 1是 ...
- Ubuntu中为Eclipse添加桌面启动快捷方式
Ubuntu中应用程序启动器“XXX.desktop”还没有被标记为可信任的问题:http://www.tuicool.com/articles/fIBJ32n eclipse问题:prefences ...
- HandyJSON代码阅读
功能:model = modelType.transform(rawdata) 使用分析: 使用机制:继承+实现配置+使用: 需要自己实现什么? 设计分析: 工具模块?机制模块?model基类? 生成 ...
- Dispatch groups 与任务同步
https://developer.apple.com/library/content/documentation/General/Conceptual/ConcurrencyProgrammingG ...
- 在编译器中调试spark程序处理
在IDEA中调试spark程序会报错 18/05/16 07:33:51 WARN NativeCodeLoader: Unable to load native-hadoop library for ...