Description

给出A,B,考虑所有满足l<=a<=A,l<=b<=B,且不存在n>1使得n^2同时整除a和b的有序数

对(a,b),求其lcm(a,b)之和。答案模2^30。

Input

第一行一个整数T表示数据组数。接下来T行每行两个整数A,B表示一组数据。

T ≤ 2000,A,B ≤ 4 × 10^6

Output

对每组数据输出一行一个整数表示答案模2^30的值

Sample Input

5

2 2

4 6

3 4

5 1

23333 33333

Sample Output

7

148

48

15

451085813

Solution

设\(f(i)\)表示\(i\)有无平方因子(有为\(0\),否则为\(1\))

那么题目的式子其实就是

\[\sum_{i=1}^n\sum_{j=1}^mlcm(i,j)f(gcd(i,j))
\]

稍微用一下套路就可以化简到这步:

(设\(S(i)=\sum_{i=1}^ni\) )

\[\sum_{d=1}^n df(d)\sum_{k=1}^{\lfloor \frac{n}{d} \rfloor}\mu(k)k^2S(\lfloor \frac{n}{kd} \rfloor)S(\lfloor \frac{m}{kd} \rfloor)
\]

设\(T=kd\),换元可得

\[\sum_{T=1}^nS(\lfloor \frac{n}{T} \rfloor)S(\lfloor \frac{m}{T} \rfloor)T\sum_{k|T}k\mu(k)f(\frac{T}{k})
\]

后面显然是个积性函数(两个积性函数的点积与另一个积性函数的狄利克雷卷积)

那么讨论一下来筛出来后面的就好了

设\(g(i)=\sum_{k|i}k\mu(k)f(\frac{i}{k})\)

当\(i=1\)时,\(g(i)=1\)

当\(i\in prime\)时,\(g(i)=1-i\)

当\(i\) 有平方质因子时,把平方质因子分离出来,手动展开一下就知道\(g(p^2)=-p,g(p^c)=0(c>2)\)。所以分离出来平方质因子然后分类讨论一下就好

复杂度\(O(n+T\sqrt{n})\)

因为取模是对\(2\)的整数次幂取模,所以直接在最后与\(2^{30}-1\)取与即可。

#include <bits/stdc++.h>
using namespace std; namespace io {
char buf[1<<21], *p1 = buf, *p2 = buf;
inline char gc() {
if(p1 != p2) return *p1++;
p1 = buf;
p2 = p1 + fread(buf, 1, 1 << 21, stdin);
return p1 == p2 ? EOF : *p1++;
}
#define G gc #ifndef ONLINE_JUDGE
#undef G
#define G getchar
#endif template<class I>
inline void read(I &x) {
x = 0; I f = 1; char c = G();
while(c < '0' || c > '9') {if(c == '-') f = -1; c = G(); }
while(c >= '0' && c <= '9') {x = x * 10 + c - '0'; c = G(); }
x *= f;
} template<class I>
inline void write(I x) {
if(x == 0) {putchar('0'); return;}
I tmp = x > 0 ? x : -x;
if(x < 0) putchar('-');
int cnt = 0;
while(tmp > 0) {
buf[cnt++] = tmp % 10 + '0';
tmp /= 10;
}
while(cnt > 0) putchar(buf[--cnt]);
} #define in(x) read(x)
#define outn(x) write(x), putchar('\n')
#define out(x) write(x), putchar(' ') } using namespace io; #define ll long long
const int N = 4000100;
const ll mod = (1 << 30); ll g[N];
int n, m;
int cnt, p[N / 10], vis[N], tot[N], lev[N]; void init() {
g[1] = 1;
for(int i = 2; i < N; ++i) {
if(!vis[i]) {
p[++cnt] = i;
g[i] = 1LL - i;
lev[i] = i;
tot[i] = 1;
}
for(int j = 1; j <= cnt && i * p[j] < N; ++j) {
vis[i * p[j]] = 1;
if(i % p[j] == 0) {
lev[i * p[j]] = lev[i] * p[j];
tot[i * p[j]] = tot[i] + 1;
int tmp = i / lev[i];
if(tot[i * p[j]] == 2) g[i * p[j]] = g[tmp] * (-p[j]);
else g[i * p[j]] = 0;
break;
}
g[i * p[j]] = g[i] * g[p[j]];
lev[i * p[j]] = p[j];
tot[i * p[j]] = 1;
}
}
for(int i = 1; i < N; ++i) g[i] = (i * g[i] + g[i - 1]);
} ll c1(ll n) {
return 1LL * n * (n + 1LL) / 2LL;
} int main() {
int T;
read(T);
init();
while(T--) {
ll ans = 0;
read(n), read(m);
if(n > m) swap(n, m);
for(ll l = 1, r; l <= n; l = r + 1) {
r = min(n / (n / l), m / (m / l));
ans = (ans + c1(n / l) * c1(m / l) * (g[r] - g[l - 1]));
}
outn(ans & (mod - 1));
}
}

BZOJ4659: Lcm的更多相关文章

  1. BZOJ4659:lcm

    传送门 题目所给的不合法的条件可以转化为 \[\exists p,p^2|gcd(a,b) \Leftrightarrow \mu(gcd(a,b))\ne 0\] 那么 \[ans=\sum_{a= ...

  2. [bzoj4659\2694]Lcm_数论_莫比乌斯反演

    Lcm bzoj-4659 bzoj-2694 题目大意:给出A,B,考虑所有满足l<=a<=A,l<=b<=B,且不存在n>1使得n^2同时整除a和b的有序数对(a,b ...

  3. LCM性质 + 组合数 - HDU 5407 CRB and Candies

    CRB and Candies Problem's Link Mean: 给定一个数n,求LCM(C(n,0),C(n,1),C(n,2)...C(n,n))的值,(n<=1e6). analy ...

  4. CodeBlocks及LCM应用

    以下是在开发过程中遇到的一些细节点: 1)called after throwing an instance of std::bad_alloc 此问题是由于publish(data),当中data赋 ...

  5. LCM 轻量级通信组件

    LCM和ZMQ比较 http://www.doc88.com/p-6711552253536.html 基于LCM和ZeroMQ的进程间通信研究 2.简介 LCM(Lightweight Commuc ...

  6. uva12546. LCM Pair Sum

    uva12546. LCM Pair Sum One of your friends desperately needs your help. He is working with a secret ...

  7. UVA 10791 Minimum Sum LCM(分解质因数)

    最大公倍数的最小和 题意: 给一个数字n,范围在[1,2^23-1],这个n是一系列数字的最小公倍数,这一系列数字的个数至少为2 那么找出一个序列,使他们的和最小. 分析: 一系列数字a1,a2,a3 ...

  8. LCM在Kernel中的代码分析

    lcm的分析首先是mtkfb.c 1.mtk_init中platform_driver_register(&mtkfb_driver)注册平台驱动 panelmaster_init(); DB ...

  9. Pairs Forming LCM(素因子分解)

    http://acm.hust.edu.cn/vjudge/contest/view.action?cid=109329#problem/B    全题在文末. 题意:在a,b中(a,b<=n) ...

随机推荐

  1. Consul服务告警之Watch机制

    熔断保护在Consul和Ocelot中都有实现,意思就是当一个服务不正常时(比如我们的一个服务实例挂了,Consul的健康检查机制检测到了),应该给系统维护人员给以告警.在Consul中,服务告警也是 ...

  2. SpringBoot系列教程web篇之Thymeleaf环境搭建

    上一篇博文介绍了如何使用Freemaker引擎搭建web项目,这一篇我们则看一下另外一个常见的页面渲染引擎Thymeleaf如何搭建一个web项目 推荐结合Freemaker博文一起查看,效果更佳 1 ...

  3. IP通信学习心得01

    一.物理拓扑 1. 1) 总线拓扑 特点:所有设备都处于同一个冲突域与广播域,共享相同的带宽 一次只能有一个设备传输,且两端要安装端接器. 传输介质:同轴电缆.(注:10Base5:容量10M 传输5 ...

  4. web版本的用户登陆票据 FormsAuthenticationTicket

    FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, "username", DateTime.N ...

  5. JVM——java内存模型和线程

    概述 计算机的运算速度与它的存储和通信子系统速度的差距太大,大量的时间都花费在磁盘I/O.网络通信或者数据库访问上.我们当然不希望处理器大部分时间都处于等待其他资源的状态,要通过一些“手段”去把处理器 ...

  6. 升级nginx1.12为1.161版本

    升级nginx1.12为1.161版本 一.添加源 到 cd /etc/yum.repos.d/ 目录下 新建nginx.repo 文件 vim nginx.repo 输入以下信息 [nginx-st ...

  7. Python开发之规范化目录

    13.规范化目录 规范目录优点: 可读性高 加载快 查询修改简 规范化目录结构 (1) start.py文件:首要配置启动文件,运行run()就可以执行项目 #start import sys imp ...

  8. 16.Python略有小成(内置模块Ⅱ)

    Python(内置模块Ⅱ) 一.规范化开发 一个py文件中 文件加载问题 代码可读性,查询差 要将一个py文件分开,合理的分成多个py文件 配置文件放在一起 : 一些轻易不改变的变量,一般命名 set ...

  9. String和Irreducible Polynomial(2019牛客暑期多校训练营(第七场))

    示例: 输入: 4000010010111011110 输出: 00001001 0111 01111 0 题意:给出一个只含有0和1的字符串,找出一种分割方法,使得每个分割出的字符串都是在该字符串自 ...

  10. R学习笔记3 数据处理

    1,日期类型 日期类型比较特殊,日期值通常以字符串的形式输入到R中,然后使用as.Date()函数转换为以数值形式存储的日期变量 mydate <- as.Date("2019-01- ...