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. HDU 4422 The Little Girl who Picks Mushrooms ( 模拟)

    Problem Description It's yet another festival season in Gensokyo. Little girl Alice planned to pick ...

  2. 推荐5 款WordPress主题后台选项开发框架

    在开发WordPress 主题的时候,借用成熟的WordPress 主题后台选项开发框架可以为我们省下不少功夫.相信你接触过不少国人做的所谓“原创”主题,一看后台都是千篇一律的界面(连CSS 都懒得改 ...

  3. FreeBSD修改root密码错误passwd: pam_chau(www.111cn.net)thtok(): error in service module from:http://www.111cn.net/sys/freebsd/66713.htm

    在FreeBSD中修改帐号密码有时候会出现一些错误,针对passwd: pam_chauthtok(): error in service module这样的错误提示,简单整理了以下解决方案:错误提示 ...

  4. SDWebImage缓存清理

    //计算缓存大小 [SDImageCache sharedImageCache] getSize] //清理缓存 SDImageCache *sd = [[SDImageCache alloc]ini ...

  5. 利用 NUget包 EPPlus 实现数据导出到Excel(适用于MVC)

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAvoAAABpCAIAAADEEBBGAAAJdElEQVR4nO3cy2ob5wLA8TxKnqTrrr

  6. MATLAB importdata函数返回值类型

    importdata函数是MATLAB中I/O文件操作的一个重要函数.需要注意的是,针对不同的文件内容,importdata函数的返回值类型也有所不同. MATLAB帮助文档中的详细说明如下: Bas ...

  7. 20140527-ASP.NET中尖括号百分号用法

    1.<%=%> 里面放的变量名,如:<div><h1>Hello World</h1><p>Welcome to Beginning ASP ...

  8. 关于火狐浏览器不支持img onerror的办法

    项目中,要使用到缺省图,除了火狐浏览器,其它浏览器都支持img onerror事件.我使用到的解决的办法就是给图片的外层标签加背景,背景图用的就是缺省图. 上代码 <img src=" ...

  9. ZigBee协议基本介绍

    ZigBee是一种短距离(10~100米).低速率(20~250Kbps).底成本.低功耗的无线网络技术,主要用于近离无线通讯.能够做到在数千个微小的传感器之间相互协调实现通讯,这些传感器只需要很少的 ...

  10. 设置textview背景色为透明

    UITextView *textView=[[UITextView alloc]initWithFrame:CGRectMake(20, 40, 150, 170)];//初始化并设置大小 textV ...