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. JAVA编写简单的日历,输入日期即可查看日历

    利用LocalDate输入年月日找出当月日历 直接上代码 import java.time.LocalDate; import java.util.Scanner; public class Cale ...

  2. java 获取控制台输入

    读取控制台输入 从控制台读取一行数据,返回值字符串 public class IO { public static void main(String args[]) throws IOExceptio ...

  3. C# NPOI 导出Execl 工具类

    NPOI 导出Execl 自己单独工具类 详见代码 using System; using System.Collections.Generic; using System.Linq; using S ...

  4. Spring Boot 表单验证、AOP统一处理请求日志、单元测试

    一.使用@Valid表单验证 于实体类中添加@Min等注解 @Entity public class Girl { @Id @GeneratedValue private Integer id; pr ...

  5. BZOJ3524: [Poi2014]Couriers(主席树)

    题意 题目链接 Sol 严格众数只会出现一次,那么建出主席树,维护子树siz,直接在树上二分即可 #include<bits/stdc++.h> #define LL long long ...

  6. LNMP笔记:阿里云32位 CentOS 5.4 配置 LNMP环境

    最近比较郁闷的是 WordPress大学 服务器故障,由于诸多原因没及时处理,导致10多天无法访问.倡萌也是刚接触服务器环境配置,维护的确力不从心,没办法排查出错误根源,所以只好重置系统盘,重新配置L ...

  7. Spring Boot fastJSON的使用

    springBoot,默认使用的json解析框架是Jackson. 虽然jackson能够满足json的解析,如果想使用熟悉的alibaba的fastjon,我们只需要在pom文件中配置maven依赖 ...

  8. 网络I/O模型--05多路复用I/O

    多路复用I/O模型在应用层工作效率比我们俗称的 BIO 模型快的本质原因是,前者不再使用操作系统级别的“同步 I/O”模型 . 在 Linux 操作系统环境下, 多路复用 I/O 模型就是技术人员通常 ...

  9. CentOS7系列--5.1CentOS7中配置和管理KVM

    CentOS7配置和管理KVM 安装与配置虚拟化软件KVM ( Kernel-based Virtual Machine ) + QEMU,它要求计算机的CPU支持Intel VT or AMD-V功 ...

  10. ArcGIS Google Map 增加虚拟图层(MapImageLayer)(转载)

    <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="ht ...