HDU-1695 莫比乌斯反演
这里学习一下莫比乌斯反演
翻看了很多书,发现莫比乌斯反演,准确来说不是一种固有的公式,而是一种法则。
我们定义F(n),为f(d)的和函数,而定义f(n)为某儿算术函数。
反演公式1:反演n的因子时
废话不用多说,直接引入题目:
HDU-1695-GCD
给出a,b,c,d,k,
问[a,b]和[c,d]区间内部有多少不同的gcd(x,y)=k的对数目。
那么我们可以把GCD(x,y)进行分解。
由于某两个数的GCD是k,那么把这两个数除以K,那么这两个数的值,一定互质。那么我们可以这样。把区间变为[a/k,b/k],找到这个区间内部,GCD(X,Y)==1的对数。
怎么用好反演函数呢??
首先我们要把F(n)和f(d)的意义赋予好的定义。
这道题要求的是对数,那么求和函数F(d)为 有多少对(x,y)满足 gcd(x,y)== d 的倍数 。f(d)为有多少对(x,y)满足 gcd(x,y)== d 。
很明显,我们需要用
这样理解,F(n)代表gcd(x,y)==n的倍数的个数,它的值其实等于所有n的倍数d的gcd(x,y)==d组数的和。
这样我们就成功反演了。并且我们需要的是gcd(x,y)=1那么带入n=1,那么这个值就非常容易算了,我们
就只需要算当d=i时,他的F(i)是多少,这就是代码,这个区间内部,gcd(x,y)==k*i(意思是gcd(x,y)为i及其倍数的)个数,这个其实就非常简单了,n/i * m/i即可,意思是x在一个范围内所有i的倍数,乘以y能取到的所有i的倍数的个数相乘,就是答案,最后做和。不过题目忽略了(x,y)和(y,x)那么我们需要在相同区间的就是能取到(x,y)(y,x)的部分,重新计算这个值,然后除以2即可。
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define LL long long
using namespace std;
const int maxn = +;
const int INF = 0x3f3f3f3f;
int miu[maxn];
bool vis[maxn];
int prime[maxn];
int mu[maxn];
int a,b,c,d,k;
void init(){
int M=maxn;
memset(prime,,sizeof(prime));
memset(mu,,sizeof(mu));
memset(vis,,sizeof(vis));
mu[]=;
int cnt=;
for (int i=;i<maxn;i++){
if (!vis[i]){//质数
prime[cnt++]=i;
mu[i]=-;//质数的mobius为-1
}
for (int j=;j<cnt && i*prime[j]<maxn ;j++){
vis[i*prime[j]]=;//筛掉
if (i%prime[j])mu[i*prime[j]]=-mu[i];
else {
mu[i*prime[j]]=;
break;
}
}
}
}
int main(){
int t;
scanf("%d",&t);
int ca=;
init();
while(t--){
ca++;
scanf("%d%d%d%d%d",&a,&b,&c,&d,&k);
if (k==){
printf("Case %d: 0\n",ca);
continue;
}
if (b>d)swap(b,d);
b=b/k;
d=d/k;
LL ans1=,ans2=;
for (int i=;i<=b;i++){
ans1+=(LL)mu[i]*(b/i)*(d/i);
}
for (int i=;i<=b;i++){
ans2+=(LL)mu[i]*(b/i)*(b/i);
}
printf("Case %d: %lld\n",ca,ans1-ans2/);
}
return ;
}
HDU-1695 莫比乌斯反演的更多相关文章
- 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 4746 (莫比乌斯反演) Mophues
这道题看巨巨的题解看了好久,好久.. 本文转自hdu4746(莫比乌斯反演) 题意:给出n, m, p,求有多少对a, b满足gcd(a, b)的素因子个数<=p,(其中1<=a<= ...
- HDU 5212 莫比乌斯反演
Code Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submis ...
- 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)这个如何利用积性函数的性质线性筛出来 作为一个质数,那 ...
随机推荐
- eclipse maven 打war包的几种方式
第一种:利用pom.xml文件打包. 右键pom.xml文件,选择Debug as或Run as 都行.但需要选择Maven install 打包 执行成功后,日志会打印出位置(看自己配置是否日志输 ...
- BUG心得
在<程序员,你会从 Bug 中学习么?>一文中,我写了我是怎样追踪这些年遇到的最有趣 bug 的.最近我重新浏览了这所有的 194 个条目(历时 13 年),看看我从这些 bug 中学到了 ...
- 基于React-Native0.55.4的语音识别项目全栈方案
移动端的API能力验证方案与PC端不一样!不一样!!不一样!!! 即使需要使用的API都存在,也不一定能用,这一点和PC端是有很大区别的,国内的手机系统虽然都是基于Android,但几乎都会经过各大厂 ...
- PHP中private、public、protected的区别详解
先简单粗俗的描述下:public 表示全局,类内部外部子类都可以访问:private表示私有的,只有本类内部可以使用:protected表示受保护的,只有本类或子类或父类中可以访问: 再啰嗦的解释下: ...
- JAVA_接口_默认方法&静态方法
1.小结(注意): 1.接口中无法定义成员变量,但是可以定义常量,其值不可以改变,默认使用public static final修饰 2.接口中,没有构造方法,不能创建对象 3.接口中,没有静态代码块 ...
- Spring笔记04_AOP注解开发_模板_事务
目录 1. Spring基于AspectJ的注解的AOP开发 1. 1 SpringAOP的注解入门 1.2 Spring的AOP的注解通知类型 1.2.1 @Before:前置通知 1.2.2 @A ...
- C#设计模式之二工厂方法模式(Factory Method Pattern)【创建型】
一.引言 在上一篇文章中我们讲解了过渡的一种模式叫做[简单工厂],也有叫[静态工厂]的,通过对简单工厂模式得了解,我们也发现了它的缺点,就是随着需求的变化我们要不停地修改工厂里面的方法的代码,需求变化 ...
- vue 页面跳转的两种方式
1,标签跳转 <router-link to='two'><button>点我到第二个页面</button></router-link> 2,点 ...
- Vue项目用了脚手架vue-cli3.0,会报错You are using the runtime-only build of Vue where the template compiler is not available.....
摘自: https://blog.csdn.net/wxl1555/article/details/83187647 报错信息如下图: 报错原因是:vue有两种形式的代码:一种是compiler(模版 ...
- js中slice,SubString和SubStr的区别
来自:https://blog.csdn.net/qq_37120738/article/details/79086706 侵删 slice() 定义和用法 slice() 方法可从已有的数组中返回选 ...