2693: jzptab

Time Limit: 10 Sec  Memory Limit: 512 MB
Submit: 444  Solved: 174
[Submit][Status][Discuss]

Description

 

Input

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

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

Output

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

Sample Input

1

4 5

Sample Output

122

HINT
T <= 10000

N, M<=10000000

  重新学习了一下积性函数方式推导莫比乌斯反演系列题目,感觉求sigma(gcd(x,y))、sigma(gcd(x,y)==1)用积性函数的性质推导应该还算是简单,但是求sigma(lcm(x,y))用积性函数就非常恶心了,具体推法详见jzp讲稿:

 传送门:http://wenku.baidu.com/link?url=_glgC9AsqkzOGXSe66vrbLWwf9mr_HZujxaAszME0pCbVtRdcTyhqODy801-tgQdoArjJYYwQGwpQ7E4mdA61OsRYO3qciEfusRQ51JPUCy

  这道题是bzoj 2154《 Crash的数字表格》的多组询问版,如果我没记错的话,那道题我用的是O(n)求sigma(lcm(x,y)),但是jzp讲的神奇的方法可以O(n)预处理,O(sqrt(n))询问。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
#define MAXP 10010000
#define MAXN 10010000
#define MOD 100000009
typedef long long qword;
bool pflag[MAXP];
int prime[MAXP],topp=-;
int phi[MAXP];
int gg[MAXP];
qword gs[MAXP];
int mu[MAXP];
void init()
{
phi[]=;
gg[]=;
mu[]=;
for (int i=;i<MAXP;i++)
{
if (!pflag[i])
{
prime[++topp]=i;
phi[i]=i-;
gg[i]=-i;
mu[i]=-;
}
for (int j=;j<=topp && i*prime[j]<MAXP;j++)
{
pflag[i*prime[j]]=true;
if (i%prime[j]==)
{
phi[i*prime[j]]=phi[i]*prime[j];
gg[i*prime[j]]=gg[i];
mu[i*prime[j]]=;
break;
}
phi[i*prime[j]]=phi[i]*(prime[j]-);
gg[i*prime[j]]=gg[i]*(-prime[j]);
mu[i*prime[j]]=-mu[i];
}
}
for (int i=;i<MAXP;i++)
gs[i]=(gs[i-]+(qword)gg[i]*i)%MOD;
return ;
}
qword solve(int n,int m)
{
qword res=;
int l=;
for (int i=;i<=min(n,m);i=l)
{
l=min(n/(n/i),m/(m/i))+;
res=(res+((qword)(n/i)*(n/i+)/%MOD)%MOD*((qword)(m/i)*(m/i+)/%MOD)%MOD*(gs[l-]-gs[i-])%MOD)%MOD;
}
res=(res+MOD)%MOD;
return res;
} int main()
{
freopen("input.txt","r",stdin);
int n,m;
int nn;
init();
scanf("%d",&nn);
while (nn--)
{
scanf("%d%d",&n,&m);
printf("%lld\n",solve(n,m));
}
}

bzoj 2693: jzptab 线性筛积性函数的更多相关文章

  1. BZOJ 2693: jzptab 莫比乌斯反演 + 积性函数 +筛法

    Code: #include<bits/stdc++.h> #define ll long long #define M 10001000 #define maxn 10200100 #d ...

  2. Divisor counting [线性筛积性函数]

    Divisor counting 题目大意:定义f(n)表示整数n的约数个数.给出正整数n,求f(1)+f(2)+...+f(n)的值. 注释:1<=n<=1000,000 想法:我们再次 ...

  3. 莫比乌斯反演/线性筛/积性函数/杜教筛/min25筛 学习笔记

    最近重新系统地学了下这几个知识点,以前没发现他们的联系,这次总结一下. 莫比乌斯反演入门:https://blog.csdn.net/litble/article/details/72804050 线 ...

  4. 牛客小白月赛12C (线性筛积性函数)

    链接:https://ac.nowcoder.com/acm/contest/392/C来源:牛客网 题目描述 华华刚刚帮月月完成了作业.为了展示自己的学习水平之高超,华华还给月月出了一道类似的题: ...

  5. P6222 「简单题」加强版 莫比乌斯反演 线性筛积性函数

    LINK:简单题 以前写过弱化版的 不过那个实现过于垃圾 少预处理了一个东西. 这里写一个实现比较精细了. 最后可推出式子:\(\sum_{T=1}^nsum(\frac{n}{T})\sum_{x| ...

  6. 线性筛积性函数+反演T套路——bzoj4407

    #include<bits/stdc++.h> using namespace std; #define ll long long #define mod 1000000007 #defi ...

  7. bzoj 4407 于神之怒加强版 —— 反演+筛积性函数

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4407 推导如这里:https://www.cnblogs.com/clrs97/p/5191 ...

  8. BZOJ 2694: Lcm 莫比乌斯反演 + 积性函数 + 线性筛 + 卡常

    求 $\sum_{i=1}^{n}\sum_{j=1}^{m}lcm(i,j)\mu(gcd(i,j))^2$   $\Rightarrow \sum_{d=1}^{n}\mu(d)^2\sum_{i ...

  9. BZOJ 2190 仪仗队(线性筛欧拉函数)

    简化题意可知,实际上题目求得是gcd(i,j)=1(i,j<=n)的数对数目. 线性筛出n大小的欧拉表,求和*2+1即可.需要特判1. # include <cstdio> # in ...

随机推荐

  1. 解决 子进程已安装的 post-removal脚本返回了错误号 100 的方法

    打开终端: $gksudo nautilus 进入目录: /var/lib/dpkg 删除: info info.bak (文件夹) 重建文件夹: info 之后重新安装 或删除就可以了.

  2. IEnumerable 和 IQueryable

    共有两组 LINQ 标准查询运算符,一组在类型为 IEnumerable<T> 的对象上运行,另一组在类型为 IQueryable<T> 的对象上运行.构成每组运算符的方法分别 ...

  3. R-大数据分析挖掘(3-R作图)

    R语言绘图功能: 提供实例: demo(graphics)

  4. 利用php给图片添加文字水印--面向对象与面向过程俩种方法的实现

    1: 面向过程的编写方法 //指定图片路径 $src = '001.png'; //获取图片信息 $info = getimagesize($src); //获取图片扩展名 $type = image ...

  5. 网易游戏QA工程师笔试回忆-2012.9【个人题解】

    ========================转帖======================== 网易游戏QA工程师笔试回忆-2012.9 刚刚从武大回来,趁热回忆下题目,给以后的XDJMs参考. ...

  6. ios 系统参数用法

    qi前言:写一个宏来选择性地编译与运行为不同iOS所写的代码来支持多个版本的ios工程 #if __IPHONE_OS_VERSION_MIN_REQUIRED #import "xxxxx ...

  7. oracle定时备份

    1.将如下代码复制到文本中,最后将文本后缀名称修改成XXX.bat 批处理文件: *********************************************************** ...

  8. 浅谈Javase内存流程图

    最近接触OOP面向对象,学习了OOP.this.super.package.extends还有override,整体来说如果不清楚内存的流程的话,对这些知识会很混淆,在老师的帮助下,花了一张图,能清楚 ...

  9. OC - 4.OC核心语法

    一.点语法 1> 基本使用 点语法本质上是set方法/get方法的调用 2> 使用注意 若出现在赋值操作符的右边,在执行时会转换成get方法 若出现在赋值操作符的左边,在执行时会转换成se ...

  10. Mybatis-generator使用和扩展

    Mybatis-generator使用和扩展 mybatis-generator使用 pom.xml配置 <plugin> <groupId>org.mybatis.gener ...