Description

背景

有一天,小Q梦见自己来到了理想国的幻想之乡。

描述

有一天,小Q梦见自己来到了理想国的幻想之乡。幻想乡有无穷户居民,第i个家庭住在编号为i的房屋里,编号从1开始,到正无穷。

居民们的房屋之间有着许多种道路,其中第k种道路只连接在编号为k的倍数且在k的倍数中连续的房屋之间。例如第1种道路连接在编号为(1,2),(2,3),(3,4)…的房屋之间,而第3种道路只连接在编号为(3,6),(6,9),(9,12)…的房屋之间。

小Q要抓紧睡梦的时间来拜访幻想之乡中的贵人,他希望你能帮他完成这场幻想之旅。他经常会从某个编号为i的房屋只走某种道路快速到达某个编号为j的房屋,比如说从编号为4的房屋走到编号为8的房屋,可以走4->5->6->7->8,也可以走4->6->8,甚至可以走4->8一步到达目的地。

他很好奇,如果他的起点房屋的编号是不大于n的,终点房屋的编号是不大于m的,对于所有可能的起点与终点,他最少会走多少条路,注意他的移动只会选择一种道路。

为了避免精度误差,他希望你能告诉他所有可能的起点与终点所对应的经过的最少边数之和。

由于这个数可能超过1018,但是不会很大,所以你只需要求出它对两个质数109+7和10^9+9的模值即可,小Q的数学很好,他会算出原来的答案

Input

第一行一个正整数T,表示小Q有T组好奇的问题。

接下来是T组问题,每组问题占一行,共两个正整数n, m,空格隔开。

Output

共T行,每行两个空格隔开的整数,表示每组问题分别模109+7和109+9的答案。

Sample Input

2

3 3

2 4

Sample Output

8 8

9 9

HINT

100%的数据 T <= 1000, n, m <= 2*10^6

Solution

题意有点迷...其实就是求

\[\sum_{i=1}^n\sum_{j=1}^m\frac{|i-j|}{gcd(i,j)}
\]

大力推式子

然后就能出来这个(写这题的应该都能推到这里吧...)

\[\begin{aligned}
&设sum(n,m)=\sum_{i=1}^n\sum_{j=1}^{m}|i-j|\\
&则原式=\sum_{T=1}^{n}sum(\frac{n}{T},\frac{m}{T})\sum_{k|T}k\mu(k)
\end{aligned}
\]

后面那段是个积性函数直接线性筛就好。

怎么筛肯定都会...不会就去重学一下线性筛吧..反正就是分类讨论。这里证明一下这个为什么是个积性函数

我们设

\[f(i)=i\mu(i)
\]

那么

\[\begin{aligned}
&设x,y互质\\
&f(xy)\\
&=x*y*\mu(xy)\\
&=x*y*\mu(x)*\mu(y)\\
&=x*\mu(x)*y*\mu(y)\\
&=f(x)f(y)
\end{aligned}
\]

所以说这是个积性函数。

我们用狄利克雷卷积把它跟恒等函数\(I\)卷起来

\[\begin{aligned}
&f*I\\
&=\sum_{d|n}f(d)\\
&=\sum_{d|n}d\mu(d)
\end{aligned}
\]

两个积性函数的狄利克雷卷积也是积性函数。

证毕。

重点在前面那一块。

我们考虑来拆一下。

当\(n=m\)时

\[\begin{aligned}
sum(n,m)
&=\sum_{i=1}^n\sum_{j=1}^{n}|i-j|\\
&=2*\sum_{i=1}^n\sum_{j=1}^{i}i-j\\
&=2*\sum_{i=1}^{n}\left(\sum_{j=1}^{i}i-\sum_{j=1}^{i}j \right)\\
&=2*\sum_{i=1}^{n}\left(i^2-\frac{i(i+1)}{2} \right)\\
&=\sum_{i=1}^{n}2i^2-i(i+1)\\
&=\sum_{i=1}^{n}i(2i-i-1)\\
&=\sum_{i=1}^{n}i^2-i\\
&=\sum_{i=1}^ni^2-\sum_{i=1}^ni\\
&=\frac{n(n+1)(2n+1)}{6}-\frac{n(n+1)}{2}\\
&=\frac{n(n+1)(n-1)}{3}
\end{aligned}
\]

把这个玩意看成一个矩形,那么当我们解决了一个正方形之后,显然就剩下一个小的矩形,我们来处理一下这个小矩形。

不妨设\(n<m\)

\[\begin{aligned}
&\sum_{i=1}^{n}\sum_{j=n+1}^{m}j-i\\
&=\sum_{i=1}^{n}\left(\sum_{j=n+1}^{m}j-\sum_{j=n+1}^mi \right)\\
&=\sum_{i=1}^{n}\left(\frac{(n+1+m)(m-n)}{2}-(m-n)i \right)\\
&=\frac{n(n+1+m)(m-n)}{2}-\frac{n(n+1)(m-n)}{2}\\
&=\frac{nm(m-n)}{2}
\end{aligned}
\]

所以这就是网上那个式子的由来了。。。但是我看其他blog都完全没有推导。

\[\begin{aligned}
&sum(n,m)(n<m)\\
&=\sum_{i=1}^n\sum_{j=1}^{n}|i-j|\\
&=\frac{n(n+1)(n-1)}{3}+\frac{nm(m-n)}{2}
\end{aligned}
\]

然后不知道为什么还要两个模数。。。完全就是增加代码量。。。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define N 2000010
const ll inf = 1e18;
const ll mod1 = 1e9 + 7;
const ll mod2 = 1e9 + 9;
int T, cnt;
ll n, m, F[2][N];
int p[N], vis[N]; void init() {
F[0][1] = F[1][1] = 1;
for(int i = 2; i < N; ++i) {
if(!vis[i]) p[++cnt] = i, F[0][i] = (1 - i + mod1) % mod1, F[1][i] = (1 - i + mod2) % mod2;
for(int j = 1; j <= cnt && p[j] * i < N; ++j) {
vis[i * p[j]] = 1;
if(i % p[j] == 0) {
F[0][i * p[j]] = F[0][i];
F[1][i * p[j]] = F[1][i];
break;
}
F[0][i * p[j]] = F[0][i] * F[0][p[j]] % mod1;
F[1][i * p[j]] = F[1][i] * F[1][p[j]] % mod2;
}
}
for(int i = 1; i < N; ++i) F[0][i] += F[0][i - 1], F[0][i] %= mod1, F[1][i] += F[1][i - 1], F[1][i] %= mod2;
} ll calc1(ll n, ll m, ll mod) {
if(!n || !m) return 0;
if(n > m) swap(n, m);
ll sum1 = n * (n + 1) * (n - 1) / 3 % mod;
ll sum2 = n * m * (m - n) / 2 % mod;
return (sum1 + sum2) % mod;
} ll calc_1(ll n, ll m) {
ll ans = 0;
for(ll l = 1, r; l <= n; l = r + 1) {
r = min(n / (n / l), m / (m / l));
ans += calc1(n / l, m / l, mod1) * (F[0][r] - F[0][l - 1] + mod1) % mod1;
ans %= mod1;
}
return ans;
} ll calc_2(ll n, ll m) {
ll ans = 0;
for(ll l = 1, r; l <= n; l = r + 1) {
r = min(n / (n / l), m / (m / l));
ans += calc1(n / l, m / l, mod2) * (F[1][r] - F[1][l - 1] + mod2) % mod2;
ans %= mod2;
}
return ans;
} int main() {
scanf("%d", &T);
init();
while(T--) {
scanf("%lld%lld", &n, &m);
if(n > m) swap(n, m);
printf("%lld %lld\n", calc_1(n, m), calc_2(n, m));
}
}

BZOJ4018: 小Q的幻想之乡的更多相关文章

  1. 平面直接坐标系线段相交问题(小Q(钟神)的问题)

    [问题描述] 小 Q 对计算几何有着浓厚的兴趣.他经常对着平面直角坐标系发呆,思考一些有趣的问题.今天,他想到了一个十分有意思的题目:首先,小 Q 会在?轴正半轴和?轴正半轴分别挑选?个点.随后,他将 ...

  2. hdu---(4515)小Q系列故事——世界上最遥远的距离(模拟题)

    小Q系列故事——世界上最遥远的距离 Time Limit: 500/200 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)T ...

  3. HD4505小Q系列故事——电梯里的爱情

    Problem Description 细心的同事发现,小Q最近喜欢乘电梯上上下下,究其原因,也许只有小Q自己知道:在电梯里经常可以遇到他心中的女神HR. 电梯其实是个很暧昧的地方,只有在电梯里,小Q ...

  4. hdu4505小Q系列故事——电梯里的爱情

    小Q系列故事——电梯里的爱情 Time Limit: 300/100 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Tota ...

  5. HDU-4515 小Q系列故事——世界上最遥远的距离

    小Q系列故事——世界上最遥远的距离 Time Limit: 500/200 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) ...

  6. 2013腾讯编程马拉松初赛第二场(3月22日) 小Q系列故事——为什么时光不能倒流 ---好水!!

    我以为我会是最坚强的那一个 我还是高估了自己 我以为你会是最无情的那一个 还是我贬低了自己 就算不能够在一起 我还是为你担心 就算你可能听不清 也代表我的心意 那北极星的眼泪 闪过你曾经的眼角迷离 那 ...

  7. HDU4530:小Q系列故事——大笨钟

    Problem Description 饱尝情感苦恼的小Q本打算隐居一段时间,但仅仅在3月25号一天没有出现,就有很多朋友想念他,所以,他今天决定再出来一次,正式和大家做个告别. 小Q近来睡眠情况很差 ...

  8. 欢迎大家关注我的微信公众帐号小q机器人(xiaoqrobot)(转)

    一个偶然的机会让我接触到了微信公众平台,赶紧加了几个交流群了解下相关情况,突然间发现好像全部的APP开发人员都在研究微信公众帐号的开发,而我显得有些落舞了.至于为什么热度会这么高,我想一个数字足以说明 ...

  9. HDU 4520 小Q系列故事——最佳裁判

    Time Limit : 500/200ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other) Problem Description 过 ...

随机推荐

  1. Sitecore CMS中删除项目

    如何删除项目以及如何在Sitecore CMS中恢复已删除的项目. 删除项目 有多种方便的方法可以删除Sitecore中的项目. 从功能区 在内容树中选择您要删除的项目. 单击功能区中“主页”选项卡的 ...

  2. GZIPOutputStream GZIPInputStream

    GZIP is appropriate for single data stream. Example: Compress one file public class Demo8 {  public ...

  3. 什么是Satoshi?和比特币中本聪有什么关系?

    Satoshi Nakamoto(中本聪)是发起比特币和原始比特币客户端创建者.不过,我经常听到“Satoshi ”这个词,好像它是一个货币单位. 什么是Satoshi呢?Satoshi是0.0000 ...

  4. 进程表示之进程ID号

    UNIX进程总是会分配一个号码用于在其命名空间总唯一地标识它们,该号码称作进程ID号,简称PID. 1.进程ID 但每个进程除了PID外,还有其他的ID,有下列几种可能的类型: (1)处于某个线程组中 ...

  5. Wi-Fi Mesh网络技术

    Wi-Fi在很早的时候就引入了mesh技术,并且最近得到了越来越多的关注.谷歌.Eero.Linksys.Netgear以及几乎所有以家庭和小型办公室为目标的网络品牌都提供了mesh网格系统.但是也有 ...

  6. SpringMVC实现 MultipartFile 文件上传

    1. Maven 工程引入所需要的依赖包 2. 页面需要开放多媒体标签 3. 配置文件上传试图解析器 4. 接收图片信息,通过 IO 流写入磁盘(调用解析其中的方法即可) 如下: 1.1 引入所依赖的 ...

  7. e3.7.2-MyEclipse-10.7安装SVN插件

    MyEclipse 10.7的版本是:e3.7.2,要求是匹配该插件eclipse_svn_site-1.10.1的版本,否则无效 将eclipse_svn_site-1.10.1插件文件夹直接拷贝到 ...

  8. 关于web.xml中配置Spring字符编码过滤器以解决中文乱码的问题

    当出现中文乱码问题,Spring中可以利用CharacterEncodingFilter过滤器解决,如下代码所示: <!-- Spring字符编码过滤器:解决中文乱码问题 --> < ...

  9. SpringMVC之JSON交互

    #什么是json? json是一种用于储存数据格式,是js脚本语言的子集. #json的作用? 它可以传递对象.数组等数据结构.如果是单个数据,则要用数组,不用对象,因为对象都是键值对的 方式去存储, ...

  10. selenium自动化之鼠标操作

    在做自动化测试的时候,经常会遇到这种情况,某个页面元素,你必须要把鼠标移动到上面才能显示出元素.那么这种情况,我们怎么处理呢?,selenium给我们提供了一个类来处理这类事件——ActionChai ...