[bzoj3529] [洛谷P3312] [Sdoi2014] 数表
Description###
有一张n×m的数表,其第i行第j列(1 < =i < =n,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
想法##
orz PoPoQQQ……
基本想法同“YY的GCD”
线性筛可筛出每个数i的约数和s[i]
之后离线处理,将a与s[]分别从小到大排序处理,莫比乌斯反演,树状数组维护前缀和。
代码##
注意:诡异的取模需要注意一下。
#include<cstdio>
#include<iostream>
#include<algorithm>
#define P 1<<31
using namespace std;
typedef long long ll;
const int N = 100005;
int mu[N];
ll s[N],sm[N];
int p[N],prime[N],pnum;
void getmu(){
mu[1]=s[1]=1;
for(int i=2;i<N;i++) p[i]=1;
for(int i=2;i<N;i++){
if(p[i]){
prime[pnum++]=i;
mu[i]=-1;
s[i]=sm[i]=1+i;
}
for(int j=0;j<pnum && (ll)prime[j]*i<N;j++){
int id=prime[j]*i;
p[id]=0;
if(i%prime[j]==0){
mu[id]=0;
s[id]=s[i]/sm[i]*(sm[i]*prime[j]+1);
sm[id]=sm[i]*prime[j]+1;
break;
}
mu[id]=-mu[i];
s[id]=s[i]*(1+prime[j]);
sm[id]=1+prime[j];
}
}
}
int num[N];
bool cmp(int x,int y) { return s[x]<s[y]; }
struct Bit{
ll c[N];
int lowbit(int x) { return x&(-x); }
void add(int x,ll y){
while(x<N){
(c[x]+=y)%=P;
x+=lowbit(x);
}
}
ll sum(int x){
ll ret=0;
while(x){
(ret+=c[x])%=P;
x-=lowbit(x);
}
return ret;
}
}f;
struct data{
int n,m,a,id;
bool operator < (const data &b) const{
return a<b.a;
}
}d[N];
ll ans[N];
int main()
{
int T;
getmu();
for(int i=1;i<N;i++) num[i]=i;
sort(num+1,num+1+100000,cmp);
scanf("%d",&T);
for(int i=1;i<=T;i++){
scanf("%d%d%d",&d[i].n,&d[i].m,&d[i].a);
d[i].id=i;
}
sort(d+1,d+1+T);
int t=1,n,m;
for(int i=1;i<=T;i++){
while(t<N && s[num[t]]<=d[i].a) {
for(int j=1;(ll)j*num[t]<N;j++)
f.add(j*num[t],s[num[t]]*mu[j]);
t++;
}
n=d[i].n; m=d[i].m;
for(int l=1,r;l<=min(n,m);l=r+1){
r=min(n/(n/l),m/(m/l));
ans[d[i].id]+=(f.sum(r)-f.sum(l-1))*(n/l)*(m/l);
}
}
for(int i=1;i<=T;i++)
printf("%lld\n",ans[i]&2147483647);
return 0;
}
[bzoj3529] [洛谷P3312] [Sdoi2014] 数表的更多相关文章
- 洛谷 P3312 [SDOI2014]数表 解题报告
P3312 [SDOI2014]数表 题目描述 有一张\(N*M\)的数表,其第\(i\)行第\(j\)列(\(1\le i \le n\),\(1 \le j \le m\))的数值为能同时整除\( ...
- 洛谷P3312 - [SDOI2014]数表
Portal Solution 共\(T(T\leq2\times10^4)\)组测试数据.给出\(n,m(n,m\leq10^5),a(a\leq10^9)\),求\[ \sum_{i=1}^n\s ...
- 洛谷P3312 [SDOI2014]数表(莫比乌斯反演+树状数组)
传送门 不考虑$a$的影响 设$f(i)$为$i$的约数和 $$ans=\sum\limits_{i=1}^n\sum\limits_{j=1}^nf(gcd(i,j))$$ $$=\sum\limi ...
- 洛谷 P3312 [SDOI2014]数表
式子化出来是$\sum_{T=1}^m{\lfloor}\frac{n}{T}{\rfloor}{\lfloor}\frac{m}{T}{\rfloor}\sum_{k|T}\mu(\frac{T}{ ...
- 洛咕3312 [SDOI2014]数表
洛咕3312 [SDOI2014]数表 终于独立写出一道题了...真tm开心(还是先写完题解在写的) 先无视a的限制,设\(f[i]\)表示i的约数之和 不妨设\(n<m\) \(Ans=\su ...
- 并不对劲的bzoj3529:loj2193:p3312:[SDOI2014]数表
题目大意 定义函数\(f(x)=\sum_{k|x}k\) \(t\)(\(t\leq2*10^4\))组询问,每组给定\(n,m,a\)(\(n,m\leq10^5,a\leq10^9\)),求: ...
- P3312 [SDOI2014]数表
啊啊啊我昨天怎么没写题解wwww 补昨日题解... 题目链接 : https://www.luogu.org/problemnew/show/P3312 也是莫反 我要把fft留到今天写 [和zyn小 ...
- 洛谷 P3313 [SDOI2014]旅行 解题报告
P3313 [SDOI2014]旅行 题目描述 S国有N个城市,编号从1到N.城市间用N-1条双向道路连接,满足从一个城市出发可以到达其它所有城市.每个城市信仰不同的宗教,如飞天面条神教.隐形独角兽教 ...
- luogu P3312 [SDOI2014]数表
传送门 我们看要求的东西\[\sum_{i=1}^{n}\sum_{j=1}^{m}[\sigma(gcd(i,j))\le a]\sigma(gcd(i,j))\] 然而\(\le a\)比较烦,可 ...
随机推荐
- dll中全局变量在外部进行引用
在Windows中实际导出全局变量,您必须使用类似于export / import语法的语法,例如: #ifdef COMPILING_THE_DLL #define MY_DLL_EXPORT ex ...
- PowerShell 使用 WMI 获取信息
在 PowerShell 可以很容易使用 WMI 拿到系统的信息,如果有关注我的网站,就会发现我写了很多通过 WMI 拿到系统的显卡,系统安装的软件等方法,本文告诉大家如果通过 PowerShell ...
- JQ表单选择器和CSS3表单选择器
JQ表单选择器和CSS3表单选择器 JQ表单选择器 为了使用户能够更加灵活地操作表单,jQuery中加入了表单选择器,利用这个选择器能极其方便的获取到表单的某个或者某类型的元素.表单选择器的介绍如图: ...
- JS闭包机制实现为DOM元素循环添加事件
HTML代码: <button type='button' class='btn' id='1'>按钮1</button> <button type='button' c ...
- oracle解除被锁定的表的状态
select b.owner,b.object_name,a.session_id,a.locked_mode,c.serial#,c.sid||','||c.serial# from v$loc ...
- Team Foundation Server 2015使用教程【2】:默认团队成员添加
官方文档:https://www.visualstudio.com/en-us/docs/setup-admin/add-users
- Flask框架知识点整合
Flask 0.Flask简介 Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收ht ...
- TCP/IP||IP选路
1.选路原理 在IP搜索路由表分为几个步骤 1.搜索匹配的主机地址 2.搜索匹配的网络地址 3.搜索默认表项. IP层进行选路实际是一种选路机制,搜索路由表并决定向哪个网络接口发送分组,区别选路策略, ...
- .NET BS端和CS端相互压缩发送接收byte对象数据方法
本文是总结实际项目经验,代码不少是学习别人整合的,效果稳定可靠,有很大参考价值:但是也有不全面的地方,朋友们拿到可以按照自己需要修改. 场景是项目需要在客户端控制台软件和.NET MVC站点间互相传递 ...
- java 实现敏感词(sensitive word)工具详解使用说明
sensitive-word 平时工作中,只要涉及到用户可以自由发言(博客.文档.论坛),就要考虑内容的敏感性处理. sensitive-word 基于 DFA 算法实现的高性能敏感词工具.工具使用 ...