BZOJ 2694: Lcm [莫比乌斯反演 线性筛]
题意:求\(\sum\limits_{i=1}^n \sum\limits_{j=1}^m lcm(i,j)\ : gcd(i,j) 是sf 无平方因子数\)
无平方因子数?搞一个\(\mu(gcd(i,j))\)不就行了..不对不对有正负,是\(\mu^2\)才行
套路推♂倒 (ノ*・ω・)ノ
\sum\limits_{i=1}^n \sum\limits_{j=1}^m \frac{ij}{gcd(i,j)} \mu(gcd(i,j))^2
&=\sum_{d=1}^n d\ \mu(d^2) \sum_{i=1}^{\frac{n}{d}} \sum_{j=1}^{\frac{m}{d}}ij[gcd(i,j)=1]\\
&= \sum_{D=1}^n D\sum_{d|D} \mu(d)^2 \mu(\frac{D}{d})\frac{D}{d} \ f(\frac{n}{D}, \frac{m}{D}) \\
\end{align*}
\]
woc那是个smg,自己卷自己? $g(i) = i \cdot ((\mu \cdot \mu) * (\mu \cdot id))(i) $
如果我没猜错,点乘和卷积没有什么律吧
\(g(1) = 1\)
\(g(p) = p*(1-p)\)
观察那堆\(\mu\),分成的两个因子都有的话,相同的质数必须一边一个啊要不就是0没贡献了
考虑\(p \mid i\),\(i\)中还至少有一个\(p\),我们记录最小质因子的次数判断一下\(ip\)的质因子多于2个\(g(ip)=0\)了,正好两个的话肯定是一面一个,结果就是\(g(\frac{i}{p})*(-p)\)啊...不对不对,前面的\(i\)让你吃了?应该是\(*(-p\cdot p^2)\)
貌似还有更科学的想法,i除掉p后两个就互质了...
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
const int N=4e6+5, INF=1e9, P = 1<<30;
#define pii pair<int, int>
#define MP make_pair
#define fir first
#define sec second
typedef long long ll;
inline int read(){
char c=getchar();int x=0,f=1;
while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
return x*f;
}
int n, m;
int notp[N], p[N], cp[N]; ll g[N];
void sieve(int n) {
g[1] = 1;
for(int i=2; i<=n; i++) {
if(!notp[i]) p[++p[0]] = i, g[i] = i*(1-i), cp[i] = 1;
for(int j=1; j<=p[0] && i*p[j]<=n; j++) {
int t = i*p[j];
notp[t] = 1;
if(i%p[j] == 0) {
cp[t] = cp[i]+1;
if(cp[t] <= 2) g[t] = g[i/p[j]] * (-p[j] * p[j] * p[j]) %P;
else g[t] = 0;
break;
}
cp[t] = 1;
g[t] = g[i] * g[p[j]];
}
}
for(int i=1; i<=n; i++) (g[i] += g[i-1]) %=P;
}
inline ll f(ll n, ll m) {return ( n*(n+1)/2 %P) * ( m*(m+1)/2 %P)%P;}
ll cal(int n, int m) {
ll ans=0; int r;
for(int i=1; i<=n; i=r+1) {
r = min(n/(n/i), m/(m/i));
( ans += (g[r] - g[i-1]) * f(n/i, m/i) )%=P;
}
return (ans+P)%P;
}
int main() {
//freopen("in","r",stdin);
sieve(N-1);
int T=read();
while(T--) {
n=read(); m=read();
if(n>m) swap(n, m);
printf("%lld\n", cal(n, m));
}
}
BZOJ 2694: Lcm [莫比乌斯反演 线性筛]的更多相关文章
- 【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)$之 ...
- BZOJ 2694: Lcm 莫比乌斯反演 + 积性函数 + 线性筛 + 卡常
求 $\sum_{i=1}^{n}\sum_{j=1}^{m}lcm(i,j)\mu(gcd(i,j))^2$ $\Rightarrow \sum_{d=1}^{n}\mu(d)^2\sum_{i ...
- BZOJ 2693: jzptab [莫比乌斯反演 线性筛]
2693: jzptab Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1194 Solved: 455[Submit][Status][Discu ...
- [bzoj] 2694 Lcm || 莫比乌斯反演
原题 定义整数a,b,求所有满足条件的lcm(a,b)的和: 1<=a<=A 1<=b<=B ∀n>1,n2†gcd(a,b)(即任意n>1,\(n^2\)不是gc ...
- 【bzoj2693】jzptab 莫比乌斯反演+线性筛
题目描述 输入 一个正整数T表示数据组数 接下来T行 每行两个正整数 表示N.M 输出 T行 每行一个整数 表示第i组数据的结果 样例输入 1 4 5 样例输出 122 题解 莫比乌斯反演+线性筛 由 ...
- 【bzoj4407】于神之怒加强版 莫比乌斯反演+线性筛
题目描述 给下N,M,K.求 输入 输入有多组数据,输入数据的第一行两个正整数T,K,代表有T组数据,K的意义如上所示,下面第二行到第T+1行,每行为两个正整数N,M,其意义如上式所示. 输出 如题 ...
- bzoj 2820 YY的GCD - 莫比乌斯反演 - 线性筛
Description 神犇YY虐完数论后给傻×kAc出了一题给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对kAc这种 傻×必 ...
- bzoj 4407: 于神之怒加强版【莫比乌斯反演+线性筛】
看着就像反演,所以先推式子(默认n<m): \[ \sum_{d=1}^{n}d^k\sum_{i=1}^n\sum_{j=1}^m[gcd(i,j)==d] \] \[ =\sum_{d=1} ...
- BZOJ 3309: DZY Loves Math [莫比乌斯反演 线性筛]
题意:\(f(n)\)为n的质因子分解中的最大幂指数,求\(\sum_{i=1}^n \sum_{j=1}^m f(gcd(i,j))\) 套路推♂倒 \[ \sum_{D=1}^n \sum_{d| ...
随机推荐
- Digit Generator(水)
题目链接:http://acm.tju.edu.cn/toj/showp2502.html2502. Digit Generator Time Limit: 1.0 Seconds Memor ...
- ubuntu配置服务器apache
在配置apache之前我们需要先配置好ubuntu中的网络,如果不太懂的话可以看看这我的这篇文章:配置ubuntu网络,里面详细的介绍了怎么配置ubuntu的网络. 1.安装apache服务器 sud ...
- android studio无法识别含有rcs包名的jar
http://blog.csdn.net/JingleYe/article/details/70048943 android studio无法识别含有rcs包名的jar android stu ...
- Java本地缓存解决方案其一(使用Google的CacheBuilder)
前不久,业务实现上需要用到本地缓存来解决一些数据量相对较小但是频繁访问的数据,通过查找各种资料,找到了一种可以实现的方案--采用的是Google的CacheBuilder.下面是代码实现过程:1.首先 ...
- POJ 1426 Find The Multiple(数论——中国同余定理)
题目链接: http://poj.org/problem?id=1426 Description Given a positive integer n, write a program to find ...
- sublime text如何保存为uft-8无bom编码格式文件
https://jingyan.baidu.com/article/9158e000388092a2541228b6.html 今天发现自己的文件突然多了很多特殊符号,真是奇了怪,查找html里面也并 ...
- hibernate.dialect是干嘛用的?
dialect[ˈdaɪəlekt]就是“方言”,因为hibernate是要把Java对象转换成关系数据库来描述的,而关系数据库虽然有一些统一的标准,如SQL-92等,但是实际上各数据库如Oracle ...
- OOAD之策略模式(1)
在引入策略模式之前.先用一个小项目解释为什么要有策略模式.这是一个模拟鸭子的小游戏.最开始需求为,所有的鸭子都会叫以及都会游泳且叫声游泳姿势都一样.因此我们用原始OO的思维去编写代码时很容易做到 pu ...
- MYBATIS异常:INVALID BOUND STATEMENT
1.mapper.xml中namespaces错误(***) 2.方法不存在 3.方法返回值错误
- Java compiler level does not match the version of the installed java project facet错误的解决
因工作的关系,Eclipse开发的Java项目拷来拷去,有时候会报一个很奇怪的错误.明明源码一模一样,为什么项目复制到另一台机器上,就会报“java compiler level does not m ...