Description

有一张N×m的数表,其第i行第j列(1 < =i < =礼,1 < =j < =m)的数值为
能同时整除i和j的所有自然数之和。给定a,计算数表中不大于a的数之和。

Input

输入包含多组数据。
    输入的第一行一个整数Q表示测试点内的数据组数,接下来Q行,每行三个整数n,m,a(|a| < =10^9)描述一组数据。

Output

对每组数据,输出一行一个整数,表示答案模2^31的值。

Sample Input

2
4 4 3
10 10 5

Sample Output

20
148

HINT

1 < =N.m < =10^5  , 1 < =Q < =2×10^4

/*
在PoPoQQQ的ppt上看的,感觉各种化简很神。
*/
#include<cstdio>
#include<iostream>
#include<algorithm>
#define N 1000010
using namespace std;
int prime[N],num,mul[N],t[N],mark[N],ans[N],mx;
struct node{int n,m,a,id;}q[N];
pair<int,int> F[N];
bool operator<(node a,node b){
return a.a<b.a;
}
void add(int x,int val){
for(int i=x;i<=mx;i+=i&-i) t[i]+=val;
}
int query(int x){
int tmp=;
for(int i=x;i;i-=i&-i) tmp+=t[i];
return tmp;
}
void get_prime(){
mul[]=;
for(int i=;i<=mx;i++){
if(!mark[i]) prime[++num]=i,mul[i]=-;
for(int j=;j<=num&&i*prime[j]<=mx;j++){
mark[i*prime[j]]=;
mul[i*prime[j]]=-mul[i];
if(i%prime[j]==){mul[i*prime[j]]=;break;}
}
}
for(int i=;i<=mx;i++)
for(int j=i;j<=mx;j+=i)
F[j].first+=i;
for(int i=;i<=mx;i++) F[i].second=i;
}
void solve(int x){
int id=q[x].id,n=q[x].n,m=q[x].m;
for(int i=,j;i<=q[x].n;i=j+){
j=min(n/(n/i),m/(m/i));
ans[id]+=(n/i)*(m/i)*(query(j)-query(i-));
}
}
int main(){
int Q;scanf("%d",&Q);
for(int i=;i<=Q;i++){
scanf("%d%d%d",&q[i].n,&q[i].m,&q[i].a);
if(q[i].n>q[i].m) swap(q[i].n,q[i].m);
mx=max(mx,q[i].n);q[i].id=i;
}
get_prime();
sort(q+,q+Q+);
sort(F+,F+mx+);
int now=;
for(int i=;i<=Q;i++){
while(now+<=mx&&F[now+].first<=q[i].a){
now++;
for(int j=F[now].second;j<=mx;j+=F[now].second)
add(j,F[now].first*mul[j/F[now].second]);
}
solve(i);
}
for(int i=;i<=Q;i++)
printf("%d\n",ans[i]&0x7fffffff);
return ;
}

数表(bzoj 3529)的更多相关文章

  1. 【莫比乌斯反演】关于Mobius反演与gcd的一些关系与问题简化(bzoj 2301 Problem b&&bzoj 2820 YY的GCD&&BZOJ 3529 数表)

    首先我们来看一道题  BZOJ 2301 Problem b Description 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd( ...

  2. 【BZOJ 3529】 [Sdoi2014]数表 (莫比乌斯+分块+离线+树状数组)

    3529: [Sdoi2014]数表 Description 有一张N×m的数表,其第i行第j列(1 < =i < =礼,1 < =j < =m)的数值为能同时整除i和j的所有 ...

  3. BZOJ 3529: [Sdoi2014]数表 [莫比乌斯反演 树状数组]

    3529: [Sdoi2014]数表 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1399  Solved: 694[Submit][Status] ...

  4. BZOJ 3529 数表(莫比乌斯+树状数组)

    题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3529 题意:有一张n×m的数表,其第i行第j列的数值为能同时整除i和j的所有自然数 ...

  5. bzoj 3529 数表 莫比乌斯反演+树状数组

    题目大意: 有一张N×m的数表,其第i行第j列(1 < =i < =礼,1 < =j < =m)的数值为能同时整除i和j的所有自然数之和.给定a,计算数表中不大于a的数之和. ...

  6. 3529: [Sdoi2014]数表 - BZOJ

    Description 有一张N×m的数表,其第i行第j列(1 < =i < =n,1 < =j < =m)的数值为能同时整除i和j的所有自然数之和.给定a,计算数表中不大于a ...

  7. bzoj 3529 [Sdoi2014]数表(莫比乌斯反演+BIT)

    Description 有一张N×m的数表,其第i行第j列(1 < =i < =礼,1 < =j < =m)的数值为能同时整除i和j的所有自然数之和.给定a,计算数表中不大于a ...

  8. BZOJ 3529 数表(莫比乌斯反演)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3529 思路:令F(i)为i的约数和, 1<=x<=n,1<=y<=m G(i ...

  9. bzoj 3529 数表

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3529 题目大意:令F(i)为i的约数和,多次询问对于1<=x<=n,1< ...

  10. ●BZOJ 3529 [Sdoi2014]数表

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3529 题解: 莫比乌斯反演. 按题目的意思,令$f(i)$表示i的所有约数的和,就是要求: ...

随机推荐

  1. 从Docker到Kubernetes进阶

    分享个网站,k8s技术圈阳明大佬的网站 现在基本都用有道云笔记了,比较方便,所以准备弃用博客园了...

  2. 解决windows系统下打开应用弹出丢失libmysql.dll的问题

    只要把下载libmysql.dll,放到exe应用程序的所在目录,就可以运行,libmysql.dll有32位和64位版本,可以分别测试一下行不行,如果不行在换一个 版本试试.libmysql.dll ...

  3. Linux-缓存服务

    Memcached 基本操作 解释 命令 安装 yum install memcached 启动 memcached -d -l -m -p 停止 kill pid 查看某个端口是否通:telnet ...

  4. 09GNU C语言程序编译

    1. C 语言程序概述 ​ GNU gcc 对 ISO 标准 C89 描述的 C 语言进行了一些扩展,其中一些扩展部分已经包括进 IOS C99 标准中.本节给出了内核中经常用到的一些 gcc 扩展语 ...

  5. Java中将字符串与unicode的相互转换工具类

    unicode编码规则 unicode码对每一个字符用4位16进制数表示.具体规则是:将一个字符(char)的高8位与低8位分别取出,转化为16进制数,如果转化的16进制数的长度不足2位,则在其后补0 ...

  6. vue之列表循环

    文档:https://cn.vuejs.org/v2/guide/list.html 当 Vue.js 用 v-for 正在更新已渲染过的元素列表时,它默认用“就地复用”策略.如果数据项的顺序被改变, ...

  7. nova虚拟机镜像从创建到文件系统resize完整流程

    1. 虚拟机镜像的创建和resize流程 nova创建虚拟机涉及的组件比较多,调用比较复杂,这里只列出跟虚拟机镜像创建相关的流程,方便理清虚拟机状态变化的整个流程. nova-api nova.api ...

  8. HDU 5536 Chip Factory Trie

    题意: 给出\(n(3 \leq n \leq 1000)\)个数字,求\(max(s_i+s_j) \bigoplus s_k\),而且\(i,j,k\)互不相等. 分析: 把每个数字看成一个\(0 ...

  9. luogu2893 [USACO08FEB]修路Making the Grade

    ref #include <algorithm> #include <iostream> #include <cstring> #include <cstdi ...

  10. [POJ 1005] I Think I Need a Houseboat C++解题

        I Think I Need a Houseboat Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 81874   ...