Bzoj2694/Bzoj4659:莫比乌斯反演

先上题面:

首先看到这数据范围显然是反演了,然而第三个限制条件十分不可做。于是我们暂且无视他,大不了补集转化算完再减是吧。

于是我们有:

这里我们定义:

于是这个东西我们可以nlogn筛的说。
也就是说,我们求出f的前缀和后,就可以O(sqrt(n)+sqrt(m))分块计算了。
然而需要减去的东西怎么办呢?
反演题最难的不是推公式,而是你推出了公式却不知道是否可做。
仔细观察以上两个式子,原式中的g(也就是上式中的t),不就是我们枚举的gcd吗?
题面要求两个数不同时含某个平方因数,也就是他们的gcd不同时含某个平方因数。
那不就是我们原式中的g(上式中的t)不含平方因数吗?
而一个数x含平方因数,会有什么性质呢?μ(x)=0!
所以我们先枚举t,判断其μ值非0,然后去枚举h/t,更新f(h)即可。
这题取模2^30,我们直接用int自然溢出就好了。
(为什么?因为这样加减乘显然是对的,然而除法,只有在计算sum的时候会除二,这样我们会损失一位的精度。而int的正数精度为取模2^31的,损失一位后正好够用,所以我们可以这样做。理论上取模2^31我们也可以用unsigned int做,然而取模2^32就必须long long了。以上内容纯属口胡,如果因此wa了别打我就是了QAQ……)

代码:
(一开始sieve里面开的数组没加static wa了一次,身败名裂)

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define lli long long int
#define debug cout
using namespace std;
const int maxn=4e6+1e2,lim=4e6;
const int mod = << ; int mu[maxn],f[maxn]; inline void sieve() {
static int prime[maxn],cnt;
static bool vis[maxn];
mu[] = ;
for(int i=;i<=lim;i++) {
if( !vis[i] ) prime[++cnt] = i , mu[i] = -;
for(int j=;j<=cnt&&(lli)i*prime[j]<=lim;j++) {
const int tar = i * prime[j];
vis[tar] = ;
if( ! ( i % prime[j] ) ) break;
mu[tar] = -mu[i];
}
}
for(int i=;i<=lim;i++) if( mu[i] ) {
for(int j=;(lli)i*j<=lim;j++) f[i*j] += j * mu[j];
}
for(int i=;i<=lim;i++) f[i] *= i , f[i] += f[i-];
}
inline int sum(int x) {
return x * ( x + ) >> ;
}
inline int calc(int n,int m) {
if( n > m ) swap(n,m);
int ret = ;
for(int l=,r;l<=n;l=r+) {
r = min( n / ( n / l ) , m / ( m / l ) );
ret += ( f[r] - f[l-] ) * sum(n/l) * sum(m/l);
}
return ret;
} int main() {
static int T,a,b;
static lli ans;
scanf("%d",&T) , sieve();
while(T--) {
scanf("%d%d",&a,&b) , ans = calc(a,b);
ans = ( ans % mod + mod ) % mod;
printf("%lld\n",ans);
}
return ;
}

Bzoj2694/Bzoj4659:莫比乌斯反演的更多相关文章

  1. 【bzoj2694】Lcm 莫比乌斯反演+线性筛

    题目描述 求$\sum\limits_{i=1}^n\sum\limits_{j=1}^m|\mu(gcd(i,j))|lcm(i,j)$,即$gcd(i,j)$不存在平方因子的$lcm(i,j)$之 ...

  2. hdu1695 GCD(莫比乌斯反演)

    题意:求(1,b)区间和(1,d)区间里面gcd(x, y) = k的数的对数(1<=x<=b , 1<= y <= d). 知识点: 莫比乌斯反演/*12*/ 线性筛求莫比乌 ...

  3. BZOJ 2154: Crash的数字表格 [莫比乌斯反演]

    2154: Crash的数字表格 Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 2924  Solved: 1091[Submit][Status][ ...

  4. BZOJ2301: [HAOI2011]Problem b[莫比乌斯反演 容斥原理]【学习笔记】

    2301: [HAOI2011]Problem b Time Limit: 50 Sec  Memory Limit: 256 MBSubmit: 4032  Solved: 1817[Submit] ...

  5. Bzoj2154 Crash的数字表格 乘法逆元+莫比乌斯反演(TLE)

    题意:求sigma{lcm(i,j)},1<=i<=n,1<=j<=m 不妨令n<=m 首先把lcm(i,j)转成i*j/gcd(i,j) 正解不会...总之最后化出来的 ...

  6. 莫比乌斯函数筛法 & 莫比乌斯反演

    模板: int p[MAXN],pcnt=0,mu[MAXN]; bool notp[MAXN]; void shai(int n){ mu[1]=1; for(int i=2;i<=n;++i ...

  7. 【BZOJ-2440】完全平方数 容斥原理 + 线性筛莫比乌斯反演函数 + 二分判定

    2440: [中山市选2011]完全平方数 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2371  Solved: 1143[Submit][Sta ...

  8. POI2007_zap 莫比乌斯反演

    题意:http://hzwer.com/4205.html 同hdu1695 #include <iostream> #include <cstring> #include & ...

  9. hdu.5212.Code(莫比乌斯反演 && 埃氏筛)

    Code Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submi ...

随机推荐

  1. Java远程访问接口的几种方式

    一.Java访问远程url接口并获取结果 1.原生JavaAPI获取 package com.util; import java.io.DataOutputStream; import java.io ...

  2. SQL记录-PLSQL异常

    PL/SQL异常   程序执行过程中出现错误情况被称为在PL/SQL异常. PL/SQL支持程序员在程序中使用异常块捕获这样的条件并采取适当的动作应对错误情况.有两种类型的异常: 系统定义的异常 用户 ...

  3. Stochastic Optimization Techniques

    Stochastic Optimization Techniques Neural networks are often trained stochastically, i.e. using a me ...

  4. [整理]Git使用文章整理

    http://pcottle.github.io/learnGitBranching/ http://www.ruanyifeng.com/blog/2012/07/git.html

  5. Web性能优化系列(1):Web性能优化分析

    本文由 伯乐在线 - 鸭梨山大 翻译,sunbiaobiao 校稿.未经许可,禁止转载!英文出处:gokulkrishh.github.io.欢迎加入翻译小组. 如果你的网站在1000ms内加载完成, ...

  6. dialog 菜单实例

    dislog 菜单实例 while : do clear menu=`dialog --title system custom` [ $? -eq ] && echo "$m ...

  7. 第13月第10天 swift3.0

    1. Type 'Any' has no subscript members 这一条简直莫名其妙.大体意思就是,你这个类型"Any"不是个数组或者字典,不能按照下标取东西. 我之前 ...

  8. lucene简介——(一)

    0.概念性东西 1.数据分类

  9. gbk文件转为utf8文件

    convmv -f gbk -t utf- --notest -r ./

  10. 记一次ThreadPoolExecutor面试

    ThreadPoolExecutor点滴 线程池应该也是面试绕不开的一个点,平时大家也没少用,但其实也有一些小Tips还是值得记录一下. Constructor public ThreadPoolEx ...