Bzoj2694/Bzoj4659:莫比乌斯反演
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:莫比乌斯反演的更多相关文章
- 【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)$之 ...
- hdu1695 GCD(莫比乌斯反演)
题意:求(1,b)区间和(1,d)区间里面gcd(x, y) = k的数的对数(1<=x<=b , 1<= y <= d). 知识点: 莫比乌斯反演/*12*/ 线性筛求莫比乌 ...
- BZOJ 2154: Crash的数字表格 [莫比乌斯反演]
2154: Crash的数字表格 Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 2924 Solved: 1091[Submit][Status][ ...
- BZOJ2301: [HAOI2011]Problem b[莫比乌斯反演 容斥原理]【学习笔记】
2301: [HAOI2011]Problem b Time Limit: 50 Sec Memory Limit: 256 MBSubmit: 4032 Solved: 1817[Submit] ...
- Bzoj2154 Crash的数字表格 乘法逆元+莫比乌斯反演(TLE)
题意:求sigma{lcm(i,j)},1<=i<=n,1<=j<=m 不妨令n<=m 首先把lcm(i,j)转成i*j/gcd(i,j) 正解不会...总之最后化出来的 ...
- 莫比乌斯函数筛法 & 莫比乌斯反演
模板: int p[MAXN],pcnt=0,mu[MAXN]; bool notp[MAXN]; void shai(int n){ mu[1]=1; for(int i=2;i<=n;++i ...
- 【BZOJ-2440】完全平方数 容斥原理 + 线性筛莫比乌斯反演函数 + 二分判定
2440: [中山市选2011]完全平方数 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2371 Solved: 1143[Submit][Sta ...
- POI2007_zap 莫比乌斯反演
题意:http://hzwer.com/4205.html 同hdu1695 #include <iostream> #include <cstring> #include & ...
- hdu.5212.Code(莫比乌斯反演 && 埃氏筛)
Code Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submi ...
随机推荐
- vue+webpack开发(一)
一开始接触这个vue+webpack的时候,实在是摸不着头脑,根本无从下手. 但是经过这两天的研究,其实你会发现vue其实并不难,难度都在webpack你对webpack的理解. webpack顾名思 ...
- 修改el-table滚动条样式
<include file="Trade:header" /> <style type="text/css" media="scre ...
- bzoj千题计划237:bzoj1492: [NOI2007]货币兑换Cash
http://www.lydsy.com/JudgeOnline/problem.php?id=1492 dp[i] 表示 第i天卖完的最大收益 朴素的dp: 枚举从哪一天买来的在第i天卖掉,或者是不 ...
- python 手写队列
#encoding=utf8 class MQueue: def __init__(self): self.data = [] def get(self): if self.data.__len__( ...
- GraphChi/graphchi-java程序配置
1.导入graphchi-java maven项目时报错: Plugin execution not covered by lifecycle configuration: org.scala-too ...
- [整理]html5 WebApp 01
在正式进入WebApp开发之前,有几个问题要解决: 1.我是产品策划:UI风格,功能设计,产品预期效果(如访问量等各类指标) 2.我是UI设计:图片图标制作,我该按怎样的大小来设计? 3.我是前端开发 ...
- CF258D Little Elephant and Broken Sorting (带技巧的DP)
题面 \(solution:\) 这道题主要难在考场上能否想到这个思路(即如何设置状态)(像我这样的蒟蒻就想不到呀QAQ)不过这一题确实很神奇! \(f[i][j]:\)表示第 \(a_i\) 个数比 ...
- Servlet笔记7--HttpServletRequest介绍
通过HttpServletRequest获取表单提交的数据: 前端页面: <html> <head> <title>register</title> & ...
- mac lsof使用查看端口
安装 brew install lsof 在Mac OS系统中,无法使用netstat来查看端口占用情况,可以使用lsof来代替,这种方式在Linux下也适用. sudo lsof -nP -iTCP ...
- MVC 获取路由的 URL 参数值和默认值的集合。
跟aspx页面不一样 用Request 获取不到路由配置的 参数 可以采用下面方法获取 public ActionResult List() { //获取路由中所有的key foreach (stri ...