http://www.lydsy.com/JudgeOnline/problem.php?id=2694

Description



对于任意的>1的n gcd(a, b)不是n^2的倍数

也就是说gcd(a, b)没有一个因子的次数>=2

Input

一个正整数T表示数据组数

接下来T行 每行两个正整数 表示N、M

Output

T行 每行一个整数 表示第i组数据的结果

Sample Input

4

2 4

3 3

6 5

8 3

Sample Output

24

28

233

178

——————————————————————————————————

觉得这一道题很有纪念意义所以准备用markdown好好用公式表达一下。

而且发现我所看的博客都或多或少存在一些问题,所以不再贴他们的博客地址了。

定义:一个函数\(f(x)\),当x包含平方因子的时候,\(f(x)=0\),否则\(f(x)=1\)

定义:一个函数\(sum(x)=\sum_{i=1}^x i\)

(如果你觉得下面的过程太冗杂了,请跳过大括号区域内的过程)

——————————————————————————————————

首先假设\(n<m\),那么我们的答案最初为:

\(\sum_{i=1}^n\sum_{j=1}^m\ lcm(i,j)*f(gcd(i,j))\)

\(=\sum_{p=1}^n\sum_{i=1}^n\sum_{j=1}^m\frac{ij}{p}*f(p)*[gcd(i,j)=p]\)

\(=\sum_{p=1}^n\sum_{i=1}^{\lfloor\frac{n}{p}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{p}\rfloor}\ pij*f(p)*[gcd(i,j)=1]\)

\(=\sum_{p=1}^n\sum_{i=1}^{\lfloor\frac{n}{p}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{p}\rfloor}\ pij*f(p) \sum_{d|gcd(i,j)}\mu(d)\)

\({\)

\(=\sum_{p=1}^n\sum_{i=1}^{\lfloor\frac{n}{p}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{p}\rfloor}\ pij*f(p) \sum_{d|gcd(i,j)}\mu(d)\)

\(=\sum_{p=1}^n\sum_{i=1}^{\lfloor\frac{n}{p}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{p}\rfloor}\ pij*f(p) \sum_{d|i\bigwedge d|j}\mu(d)\)

\(=\sum_{p=1}^n p*f(p)\sum_{d=1}^{\lfloor\frac{n}{p}\rfloor}\mu(d)\sum_{i=1\bigwedge d|i}^{\lfloor\frac{n}{p}\rfloor}\sum_{j=1\bigwedge d|j}^{\lfloor\frac{m}{p}\rfloor}\ ij\)

\(=\sum_{p=1}^n p*f(p)\sum_{d=1}^{\lfloor\frac{n}{p}\rfloor}\mu(d)\sum_{i=1\bigwedge d|i}^{\lfloor\frac{n}{p}\rfloor}\sum_{j=1\bigwedge d|j}^{\lfloor\frac{m}{p}\rfloor}\ ij\)

\(}\)

\(=\sum_{p=1}^n p*f(p)\sum_{d=1}^{\lfloor\frac{n}{p}\rfloor}\mu(d)\sum_{i=1}^{\lfloor\frac{n}{pd}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{pd}\rfloor}\ ijd^2\)

\(=\sum_{p=1}^n p*f(p)\sum_{d=1}^{\lfloor\frac{n}{p}\rfloor}\mu(d)*{d^2}sum({\lfloor\frac{n}{pd}\rfloor})sum({\lfloor\frac{m}{pd}\rfloor})\)

——————————————————————————————————

令\(k=pd\),则\(p|k\),那么我们可以把sum函数提出并将式子整理得:

\(\sum_{k=1}^n sum({\lfloor\frac{n}{k}\rfloor})sum({\lfloor\frac{m}{k}\rfloor})*\sum_{p|k} p*f(p)*\mu(\frac{k}{p})*{({\frac{k}{p})}^2}\)

设\(h(k)=\sum_{p|k} p*f(p)*\mu(\frac{k}{p})*{({\frac{k}{p})}^2}\),则可化简为:

\(\sum_{k=1}^n sum({\lfloor\frac{n}{k}\rfloor})sum({\lfloor\frac{m}{k}\rfloor})*h(k)\)

显然\(h(k)\)之前的那部分可以通过分块来实现\(O(\sqrt{n})\)求解,那么现在关键问题是求\(h(k)\)。

根据各种迷之推导我们得出\(h(k)\)为积性函数,则我们可以用线性筛来求\(h(k)\)。

分情况讨论,当\(k\)为质数的时候,显然带入解得\(h(k)=k(1-k)\)。

当\(k\)不为质数的时候,我们可以表示为\(k=x*p\)(p为质数),如果\(x\)与\(p\)互质的话可以直接相乘,否则:

首先对\(x\)分解质因数为\(x={p1^{q1}}{p2^{q2}}{p3^{q3}}...{pk^{qk}}\),假设\(p=p1\),那么显然:

当\(q1>=2\)时\(f(x*p1)=0\),显然此时\(h(x*p1)=0\)。

当\(q1=1\)时\(h(x*p1)=h(x/p1)*h(p1^2)\)(显然\(x/p1\)和\(p1^2\)互质)

而\(h(p^2)=1*f(1)*\mu(p^2)*{p^4}+p*f(p)*\mu(1)*{p^2}+{p^2}*f({p^2})*\mu(1)*1\)

\(=0-3p+0=-3p\)

\(\therefore h(x*p1)=-3p1*h(x/p1)\)

#include<cstdio>
#include<queue>
#include<cctype>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
using namespace std;
const int N=4000010;
const int p=(1<<30)-1;
int f[N],su[N],g[N];
bool he[N];
inline int s(int x){
return x*(x+1)>>1;
}
void Euler(int n){
int tot=0;
f[1]=1;
for(int i=2;i<=n;i++){
if(!he[i]){
su[++tot]=i;
f[i]=i*(1-i);
}
for(int j=1;j<=tot;j++){
int t=i*su[j];
if(t>n)break;
he[t]=1;
if(i%su[j]==0){
int x=i/su[j];
if(x%su[j])f[t]=-su[j]*su[j]*su[j]*f[x];
else f[t]=0;
break;
}
else f[t]=f[i]*f[su[j]];
}
}
for(int i=1;i<=n;i++)f[i]+=f[i-1];
return;
}
int main(){
Euler(4000000);
int t;
scanf("%d",&t);
while(t--){
int n,m,ans=0;
scanf("%d%d",&n,&m);
if(n>m)swap(n,m);
for(int i=1,j;i<=n;i=j+1){
j=min(n/(n/i),m/(m/i));
ans+=(f[j]-f[i-1])*s(n/i)*s(m/i);
}
printf("%d\n",ans&p);
}
return 0;
}

BZOJ2694:Lcm——包看得懂/看不懂题解的更多相关文章

  1. SPOJ1825/FTOUR2:Free tour II——包看得懂/看不懂题解

    http://www.spoj.com/problems/FTOUR2/en/ 题目大意:给一棵黑白染色的树,求边权和最大且经过黑点不超过K的路径. ———————————————————— 前排膜拜 ...

  2. 保姆级别的RabbitMQ教程!一看就懂!(有安装教程,送安装需要的依赖包,送Java、Golang两种客户端教学Case)

    保姆级别的RabbitMQ教程!一看就懂!(有安装教程,送安装需要的依赖包,送Java.Golang两种客户端教学Case)   目录 什么是AMQP 和 JMS? 常见的MQ产品 安装RabbitM ...

  3. 一看就懂的Android APP开发入门教程

    一看就懂的Android APP开发入门教程 作者: 字体:[增加 减小] 类型:转载   这篇文章主要介绍了Android APP开发入门教程,从SDK下载.开发环境搭建.代码编写.APP打包等步骤 ...

  4. JavaScript一看就懂(2)闭包

    认识闭包之前需要先了解作用域,如果你对作用域还没有足够了解,请移步JavaScript一看就懂(1)作用域 什么是闭包? 我们可以先简单认为:一个函数a定义在另一个函数b里面,这个函数a就是闭包: f ...

  5. 一看就懂的 安装完ubuntu 18.04后要做的事情和使用教程

    一看就懂的 安装完ubuntu 18.04后要做的事情和使用教程原创CrownP 最后发布于2019-02-05 00:48:30 阅读数 2982 收藏展开1.更改为阿里云的源点击软件和更新 点击其 ...

  6. mysql取出现在的时间戳和时间时间戳转成人类看得懂的时间

    mysql取出现在的时间戳和时间时间戳转成人类看得懂的时间,我们在mysql里面他封装了一个内置的时间戳转化的函数,比如我们现在的时间戳是:1458536709 ,"%Y-%m-%d&quo ...

  7. 一看就懂的ReactJs入门教程(精华版)

    一看就懂的ReactJs入门教程(精华版) 现在最热门的前端框架有AngularJS.React.Bootstrap等.自从接触了ReactJS,ReactJs的虚拟DOM(Virtual DOM)和 ...

  8. 看完此文还不懂NB-IoT,你就过来掐死我吧...【转】

    转自:https://www.cnblogs.com/pangguoming/p/9755916.html 看完此文还不懂NB-IoT,你就过来掐死我吧....... 1 1G-2G-3G-4G-5G ...

  9. 看完此文还不懂NB-IoT,你就过来掐死我吧...

    看完此文还不懂NB-IoT,你就过来掐死我吧....... 1 1G-2G-3G-4G-5G 不解释,看图,看看NB-IoT在哪里? 2 NB-IoT标准化历程 3GPP NB-IoT的标准化始于20 ...

随机推荐

  1. [PHP] 深入理解PHP内核:变量及数据类型

    1.现实生活中我们会找一个小箱子来存放物品,一来显得不那么凌乱,二来方便以后找到.计算机也是这个道理,我们需要先在内存中找一块区域,规定用它来存放数据,并起一个好记的名字,方便以后查找.这块区域就是“ ...

  2. Eclipse软件使用说明

    http://www.ziqiangxuetang.com/eclipse/eclipse-explore-menus.html

  3. Spring Boot学习笔记(八)使用jar和war方式打包并在外部Tomcat中部署运行

    使用war包的方式发布到外部Tomcat中去 首先修改pom.xml中的配置,使打包方式设置为war包的形式 然后 maven update project 更新下项目 Application入口文件 ...

  4. 前端(十):使用redux管理数据

    react本身能够完成动态数据的监听和更新,如果不是必要可以不适用redux. 安装redux: cnpm install redux --save,或者yarn add redux. 一.react ...

  5. 【java基础】从反射开始(Reflection)

    Java学习笔记 https://github.com/SnailDev/java-learning 和我一起启程... 反射(Reflection) 定义 在运行状态中, 对于任意的一个类,都能够知 ...

  6. 将windows共享文件夹挂载在linux机器的/mnt/windows/ 目录下进行访问

    将windows共享文件夹挂载在linux机器的/mnt/windows/ 目录下进行访问.windows机器ip:192.168.1.101,用户名:XXXX密码:XXXXlinux机器ip:ip2 ...

  7. 原 java调整数据顺序是奇数位于偶数的前面(思路与实现)

    题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 思路一: 首先这 ...

  8. CSS预编译器:Sass(进阶),更快的前端开发

    1.@if     @if 指令是一个 SassScript,它可以根据条件来处理样式块,如果条件为 true 返回一个样式块,反之 false 返回另一个样式块 在 Sass 中除了 @if 之,还 ...

  9. JavaSE——转换流和缓冲流

    转换流: 类 InputStreamReader(字符输入转换流): InputStream 即读取字节流,Reader 为读取字符流. InputStreamReader将字节流转换成字符流.便于一 ...

  10. CentOS7系列--2.1CentOS7中安装配置NTP服务

    CentOS7安装配置NTP服务 NTP服务是时间同步服务 1. 安装NTPd [root@centos7 ~]# yum install -y ntp [jack@centos7 ~]$ vi /e ...