HDU 6053 TrickGCD(莫比乌斯反演)
http://acm.hdu.edu.cn/showproblem.php?pid=6053
题意:
给出一个A数组,B数组满足Bi<=Ai。
现在要使得这个B数组的GCD值>=2,求共有多少种情况。
思路:
在比赛的时候筛了素数表,然后枚举GCD来做,但是还是有些重复情况无办法剔除,赛后才知道是要用莫比乌斯来处理的,然后就趁机学习了一下莫比乌斯。
先是枚举GCD,每个数的可选情况就是GCD/a【i】,在这里我们可以把GCD/a【i】相同的数一起处理,也就是用快速幂来计算,这样会显得更快。
那么莫比乌斯是用来干嘛的呢?

然后就是容斥思想。
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<sstream>
#include<vector>
#include<stack>
#include<queue>
#include<cmath>
#include<map>
#include<set>
using namespace std;
typedef long long ll;
typedef pair<int,int> pll;
const int INF = 0x3f3f3f3f;
const int maxn = 1e5 + ; const int mod= 1e9+; int n;
int a[maxn]; ll cnt[maxn];
ll num[*maxn]; bool check[maxn+];
int prime[maxn+];
int mu[maxn+]; void Moblus()
{
memset(check,false,sizeof(check));
mu[] = ;
int tot = ;
for(int i = ; i <= maxn; i++)
{
if( !check[i] ){
prime[tot++] = i;
mu[i] = -;
}
for(int j = ; j < tot; j++)
{
if(i * prime[j] > maxn) break;
check[i * prime[j]] = true;
if( i % prime[j] == ){
mu[i * prime[j]] = ;
break;
}else{
mu[i * prime[j]] = -mu[i];
}
}
}
} ll qpow(ll a, ll b)
{
ll ans=;
while(b)
{
if(b&) ans=(ans*a)%mod;
a=(a*a)%mod;
b>>=;
}
return ans;
} int main()
{
//freopen("in.txt","r",stdin);
Moblus();
int kase=;
int T;
scanf("%d",&T);
while(T--)
{
memset(cnt,,sizeof(cnt));
scanf("%d",&n);
int MIN=INF;
int MAX=;
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
MIN=min(MIN,a[i]);
MAX=max(MAX,a[i]);
cnt[a[i]]++;
} num[]=;
for(int i=;i<=;i++) num[i]=num[i-]+cnt[i]; ll ans=; for(int i=;i<=MIN;i++)
{
ll tmp=;
for(int j=;j*i<=MAX;j++)
{
tmp=(tmp*qpow((ll)j,num[i*j+i-]-num[i*j-]))%mod; //快速幂计算,j是GCD的倍数,也就是a【i】/GCD
}
ans=(ans-tmp*mu[i]+mod)%mod;
} printf("Case #%d: %I64d\n",++kase,ans);
}
return ;
}
HDU 6053 TrickGCD(莫比乌斯反演)的更多相关文章
- HDU 6053 TrickGCD 莫比乌斯函数/容斥/筛法
题意:给出n个数$a[i]$,每个数可以变成不大于它的数,现问所有数的gcd大于1的方案数.其中$(n,a[i]<=1e5)$ 思路:鉴于a[i]不大,可以想到枚举gcd的值.考虑一个$gcd( ...
- HDU 6053 TrickGCD (莫比乌斯函数)
题意:给一个序列A,要求构造序列B,使得 Bi <= Ai, gcd(Bi) > 1, 1 <= i <= n, 输出构造的方法数. 析:首先这个题直接暴力是不可能解决的,可以 ...
- HDU 6053 - TrickGCD | 2017 Multi-University Training Contest 2
/* HDU 6053 - TrickGCD [ 莫比乌斯函数,筛法分块 ] | 2017 Multi-University Training Contest 2 题意: 给出数列 A[N],问满足: ...
- 2017 多校2 hdu 6053 TrickGCD
2017 多校2 hdu 6053 TrickGCD 题目: You are given an array \(A\) , and Zhu wants to know there are how ma ...
- HDU 4746 Mophues (莫比乌斯反演应用)
Mophues Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 327670/327670 K (Java/Others) Total ...
- hdu.5212.Code(莫比乌斯反演 && 埃氏筛)
Code Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submi ...
- hdu 1695 GCD 莫比乌斯反演入门
GCD 题意:输入5个数a,b,c,d,k;(a = c = 1, 0 < b,d,k <= 100000);问有多少对a <= p <= b, c <= q <= ...
- HDU 1695 GCD 莫比乌斯反演
分析:简单的莫比乌斯反演 f[i]为k=i时的答案数 然后就很简单了 #include<iostream> #include<algorithm> #include<se ...
- HDU 5212 Code (莫比乌斯反演)
题意:给定上一个数组,求 析: 其中,f(d)表示的是gcd==d的个数,然后用莫比乌斯反演即可求得,len[i]表示能整队 i 的个数,可以线性筛选得到, 代码如下: #pragma comment ...
- Mophues HDU - 4746 (莫比乌斯反演)
Mophues \[ Time Limit: 10000 ms\quad Memory Limit: 262144 kB \] 题意 求出满足 \(gcd\left(a,b\right) = k\), ...
随机推荐
- bootstrap之按钮和图片
一.按钮 类 描述 .btn 为按钮添加基本样式 .btn-default 默认/标准按钮 .btn-primary 原始按钮样式(未被操作) .btn-success 表示成功的动作 .btn-in ...
- WEB安全第四篇--与数据库的亲密接触:SQL注入攻击
零.前言 最近做专心web安全有一段时间了,但是目测后面的活会有些复杂,涉及到更多的中间件.底层安全.漏洞研究与安全建设等越来越复杂的东东,所以在这里想写一个系列关于web安全基础以及一些讨巧的pay ...
- 删除lv
author: headsen chen date: 2018-09-12 11:52:02 [root@sz02 ~]# umount /var/lib/docker [root@sz02 ~] ...
- 实用的IOS应用程序框架
实用的IOS应用程序框架 目录 概述 概述
- SpringMVC实现简单应用
我们都知道,servlet代码一般来说只能在一个servlet中做判断去实现一个servlet响应多个请求, 但是springMVC的话还是比较方便的,主要有两种方式去实现一个controller里能 ...
- 分布式数据库主键id生成策略
分布式数据库部署主要分为两种,一种是读写分离.这个需要弄主从数据库.主要是写的时候写主数据库,读的时候读从数据库.分散读取压力,对于读多写少的系统有利于 提高其性能.还有一种是分布式存储,这种主要是将 ...
- onethink后台登陆修改验证码!
验证码: $config = array( 'fontSize' => 30, // 验证码字体大小 'length' => 3, // 验证码位数 'useNoise' => fa ...
- 最舒适的路(并查集+枚举)(hdu1598)
hdu1598 find the most comfortable road Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768 ...
- 介绍一个Redis的WEB 客户端
http://webd.is/ $ git clone git://github.com/nicolasff/webdis.git $ cd webdis$ make$ ...
- D.E.Shaw——高频统计套利交易获利41亿美元
黑科技,还是要提 D.E.Shaw Research 这个奇异的存在. 要讲这个黑科技,我们可能要扯远一点,先讲讲 D.E. Shaw 这个人是怎么学术赚钱通吃,成为彻底的人生大赢家的. D.E.Sh ...