Description

Input

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

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

1

4 5

Sample Output

122

HINT

T <= 10000

N, M<=10000000

题解君:http://hi.baidu.com/mikeni2006/item/b4f78a4520de9bab61d7b985

看了一上午才看懂,最后终于在lazycal的帮助下想出来了

我们需要先预处理出那个奇怪的前缀和就是

d                                                                                                                                                                                                       Σ    d*  Σ    d'*μ(d')                                                                                                                                                                            i=1      d'|d

然后因为trunc(n/i)和trunc(m/i)都只有根号级别个值,也就是只要枚举这些值就行了

为了跑得快,类型用的longint,然后写了很多int64函数

 const
maxn=;
h=;
var
flag:array[..maxn]of boolean;
f,s:array[..maxn]of longint;
p:array[..]of longint;
t,n,m,tot:longint; function max(x,y:longint):longint;
begin
if x>y then exit(x);
exit(y);
end; function min(x,y:longint):longint;
begin
if x<y then exit(x);
exit(y);
end; function get(a:longint):longint;
begin
exit(((int64(a)*a+a)>>)mod h);
end; procedure pre;
var
i,j:longint;
begin
f[]:=;
for i:= to do
begin
if flag[i]=false then
begin
inc(tot);
p[tot]:=i;
f[i]:=-i+h;
end;
for j:= to tot do
begin
if int64(p[j])*i> then break;
flag[p[j]*i]:=true;
if i mod p[j]= then
begin
f[p[j]*i]:=f[i];
break;
end
else f[p[j]*i]:=int64(f[i])*f[p[j]]mod h;
end;
end;
for i:= to do
s[i]:=(int64(s[i-])+int64(f[i])*i)mod h;
end; procedure main;
var
i,j,t,li,ri,lj,rj,l,r,ans:longint;
begin
read(n,m);
if n>m then
begin
t:=n;n:=m;m:=t;
end;
ans:=;
i:=;
while sqr(i)<=n do
begin
ans:=(int64(ans)+((int64(f[i])*i mod h)*get(trunc(n/i))mod h)*get(trunc(m/i)))mod h;
inc(i);
end;
j:=trunc(m/i);
i:=trunc(n/i);
while (i>) and (j>) do
begin
ri:=trunc(n/i);
li:=trunc(n/(i+))+;
lj:=trunc(m/(j+))+;
rj:=trunc(m/j);
l:=max(li,lj);
r:=min(ri,rj);
if l<=r then ans:=(int64(ans)+(int64(s[r]-s[l-]+h)*get(i)mod h)*get(j))mod h;
if ri<=rj then dec(i)
else dec(j);
end;
writeln(ans);
end; begin
pre;
read(t);
while t> do
begin
dec(t);
main;
end;
end.

2693: jzptab - BZOJ的更多相关文章

  1. [bzoj 2693] jzptab & [bzoj 2154] Crash的数字表格 (莫比乌斯反演)

    题目描述 TTT组数据,给出NNN,MMM,求∑x=1N∑y=1Mlim(x,y)\sum_{x=1}^N\sum_{y=1}^M lim(x,y)\newlinex=1∑N​y=1∑M​lim(x, ...

  2. 【莫比乌斯反演】关于Mobius反演与lcm的一些关系与问题简化(BZOJ 2154 crash的数字表格&&BZOJ 2693 jzptab)

    BZOJ 2154 crash的数字表格 Description 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b ...

  3. bzoj 2693: jzptab 线性筛积性函数

    2693: jzptab Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 444  Solved: 174[Submit][Status][Discus ...

  4. BZOJ 2693: jzptab [莫比乌斯反演 线性筛]

    2693: jzptab Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1194  Solved: 455[Submit][Status][Discu ...

  5. BZOJ 2693: jzptab( 莫比乌斯反演 )

    速度居然#2...目测是因为我没用long long.. 求∑ lcm(i, j) (1 <= i <= n, 1 <= j <= m) 化简之后就只须求f(x) = x∑u( ...

  6. ●BZOJ 2693 jzptab

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=2693 题解: 莫比乌斯反演 先看看这个题,BZOJ 2154 Crash的数字表格,本题的升 ...

  7. 【BZOJ】2693: jzptab

    http://www.lydsy.com/JudgeOnline/problem.php?id=2693 题意:求$\sum_{i=1}^{n} \sum_{j=1}^{m} lcm(i, j)$, ...

  8. BZOJ 2693 jzptab

    http://www.lydsy.com/JudgeOnline/problem.php?id=2693 题解: 考虑把lcm转化成gcd那答案就是然后神奇的设:就有:一样可以枚举 的取值,这是O(√ ...

  9. Crash的数字表格 BZOJ 2154 / jzptab BZOJ 2693

    jzptab [问题描述] 求: 多组询问 [输入格式] 一个正整数T表示数据组数 接下来T行 每行两个正整数 表示N.M [输出格式] T行 每行一个整数 表示第i组数据的结果 [样例输入] 1 4 ...

随机推荐

  1. Android异步下载网络图片

    最近新做的一个项目,里面需要下载网络上的图片,并显示在UI界面上,学Android有个常识,就是Android中在主线程中没法直接更新UI的,要想更新UI必须另外开启一个线程来实现,当开启的线程完成图 ...

  2. 二十、Android -- SDcard文件读取和保存

    背景                                                                                            一些东西可以 ...

  3. springmvc 精华

    Spring Mvc简介: Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求 ...

  4. c/c++面试总结(2)

    4.深拷贝和浅拷贝 (1)什么时候会用到拷贝函数 一个对象以值传递的方式传入函数(就是作为入参) 一个对象以值传递的方式从函数返回(就是作为返回值) 一个对象需要通过另外一个对象进行初始化 (2)是否 ...

  5. [Guava源码分析]Ordering:排序

    我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3876466.html,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体验 ...

  6. ubuntu 14.04 apt-get 方式安装oracle JDK

    之前已经写了 如何手动安装oracle 的JDK :http://www.cnblogs.com/bcsflilong/p/4196536.html 其实 还有可以简单方便的用apt-get 的方式安 ...

  7. Linux操作杂记

    centos7修改默认运行等级 查看当前默认运行等级: systemctl get-dafault 修改默认运行等级为5: systemctl set-default graphical.target ...

  8. Basic Vlan Concepts

    1.  Vlan Benefit ·To reduce CPU overhead on each device by reducing the number of devices that recei ...

  9. Zend-MVC intro

    Zend-MVC intro Zend MVC层建立在servicemanager.eventmanager.http.stdlib.几个组件之上.相关组件介绍会在其他文章中详细说明. 除了以上4大组 ...

  10. session 测试用例详解

    http协议是WEB服务器与客户端(浏览器)相互通信的协议,它是一种无状态协议.所谓无状态,指的是不会维护http请求数据,http请求是独立的,非持久的.而越来越复杂的WEB应用,需要保存一些用户状 ...