BZOJ4659: Lcm
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\))
那么题目的式子其实就是
\]
稍微用一下套路就可以化简到这步:
(设\(S(i)=\sum_{i=1}^ni\) )
\]
设\(T=kd\),换元可得
\]
后面显然是个积性函数(两个积性函数的点积与另一个积性函数的狄利克雷卷积)
那么讨论一下来筛出来后面的就好了
设\(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的更多相关文章
- BZOJ4659:lcm
传送门 题目所给的不合法的条件可以转化为 \[\exists p,p^2|gcd(a,b) \Leftrightarrow \mu(gcd(a,b))\ne 0\] 那么 \[ans=\sum_{a= ...
- [bzoj4659\2694]Lcm_数论_莫比乌斯反演
Lcm bzoj-4659 bzoj-2694 题目大意:给出A,B,考虑所有满足l<=a<=A,l<=b<=B,且不存在n>1使得n^2同时整除a和b的有序数对(a,b ...
- 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 ...
- CodeBlocks及LCM应用
以下是在开发过程中遇到的一些细节点: 1)called after throwing an instance of std::bad_alloc 此问题是由于publish(data),当中data赋 ...
- LCM 轻量级通信组件
LCM和ZMQ比较 http://www.doc88.com/p-6711552253536.html 基于LCM和ZeroMQ的进程间通信研究 2.简介 LCM(Lightweight Commuc ...
- uva12546. LCM Pair Sum
uva12546. LCM Pair Sum One of your friends desperately needs your help. He is working with a secret ...
- UVA 10791 Minimum Sum LCM(分解质因数)
最大公倍数的最小和 题意: 给一个数字n,范围在[1,2^23-1],这个n是一系列数字的最小公倍数,这一系列数字的个数至少为2 那么找出一个序列,使他们的和最小. 分析: 一系列数字a1,a2,a3 ...
- LCM在Kernel中的代码分析
lcm的分析首先是mtkfb.c 1.mtk_init中platform_driver_register(&mtkfb_driver)注册平台驱动 panelmaster_init(); DB ...
- Pairs Forming LCM(素因子分解)
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=109329#problem/B 全题在文末. 题意:在a,b中(a,b<=n) ...
随机推荐
- shell request failed on channel 0
今天普通用户ssh 登录提示shell request failed on channel 0 然后就退出了 幸亏root 用户没有被禁用,在root下 su - 普通 切换提示资源不足 解决方法 ...
- iOS @功能的部分实现思路
需求描述 1. 发布信息时,通过键盘键入@符号,或者点选相关功能键,唤醒@列表,进行选择 2.选择结束后,输入栏改色显示相关内容 3.删除时,整体删除@区块,且不能让光标落在@区块之间 实现步骤 1. ...
- (idea maven)mybatis-generator步骤
1.新建一个maven项目,选择maven-archetype-webapp 点击next 2.项目名称,点击next 3.选择项目存放路径,然后点击finish 4.在main包下 添加包java和 ...
- laravel迁移文件中字段方法对应的数据库类型
/* *Blueprint类中的方法方法 <-> 数据库数据类型 * */ // 数字 increments();// int(10) unsigned primarykey auto_i ...
- 【Linux】Linux目录结构及详细介绍
00. 目录 01. 常用目录介绍 /:根目录,位于Linux文件系统目录结构的顶层,一般根目录下只存放目录,不要存放文件,/etc./bin./dev./lib./sbin应该和根目录放置在一个分区 ...
- array_walk、array_map、array_filter 的用法
array_walk.array_map.array_filter 和 foreach 都有循环对数组元素进行处理的功能. 一.array_walk 用法 1.循环数组,回调处理(并不修改数组元素的 ...
- redis的事务处理
1.redis事务可以依次执行多个命令,并且带有以下三个重要的保证: 批量操作在发送exec命令前被放入队列缓存. 收到exec命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行. 在事 ...
- C盘清理、C盘瘦身、省出30G
三招C盘瘦身30G,清理win10系统中虚占C盘空间的三大祸害 1.对C盘进行“磁盘清理” C盘右键->属性->磁盘清理->清理系统文件->勾选“windows更新清理”-&g ...
- sharepoint中的Power Shell命令创建、删除文档库列表
ListTemplateType 枚举: 自定义列表-GenericList.文档库-DocumentLibrary.图片库-PictureLibrary.公告-Announcements.联系人-C ...
- 线程池ThreadPool实战
线程池ThreadPool 线程池概念 常用线程池和方法 1.测试线程类 2.newFixedThreadPool固定线程池 3.newSingleThreadExecutor单线程池 4.newCa ...