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] 数表的更多相关文章

  1. 洛谷 P3312 [SDOI2014]数表 解题报告

    P3312 [SDOI2014]数表 题目描述 有一张\(N*M\)的数表,其第\(i\)行第\(j\)列(\(1\le i \le n\),\(1 \le j \le m\))的数值为能同时整除\( ...

  2. 洛谷P3312 - [SDOI2014]数表

    Portal Solution 共\(T(T\leq2\times10^4)\)组测试数据.给出\(n,m(n,m\leq10^5),a(a\leq10^9)\),求\[ \sum_{i=1}^n\s ...

  3. 洛谷P3312 [SDOI2014]数表(莫比乌斯反演+树状数组)

    传送门 不考虑$a$的影响 设$f(i)$为$i$的约数和 $$ans=\sum\limits_{i=1}^n\sum\limits_{j=1}^nf(gcd(i,j))$$ $$=\sum\limi ...

  4. 洛谷 P3312 [SDOI2014]数表

    式子化出来是$\sum_{T=1}^m{\lfloor}\frac{n}{T}{\rfloor}{\lfloor}\frac{m}{T}{\rfloor}\sum_{k|T}\mu(\frac{T}{ ...

  5. 洛咕3312 [SDOI2014]数表

    洛咕3312 [SDOI2014]数表 终于独立写出一道题了...真tm开心(还是先写完题解在写的) 先无视a的限制,设\(f[i]\)表示i的约数之和 不妨设\(n<m\) \(Ans=\su ...

  6. 并不对劲的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\)),求: ...

  7. P3312 [SDOI2014]数表

    啊啊啊我昨天怎么没写题解wwww 补昨日题解... 题目链接 : https://www.luogu.org/problemnew/show/P3312 也是莫反 我要把fft留到今天写 [和zyn小 ...

  8. 洛谷 P3313 [SDOI2014]旅行 解题报告

    P3313 [SDOI2014]旅行 题目描述 S国有N个城市,编号从1到N.城市间用N-1条双向道路连接,满足从一个城市出发可以到达其它所有城市.每个城市信仰不同的宗教,如飞天面条神教.隐形独角兽教 ...

  9. luogu P3312 [SDOI2014]数表

    传送门 我们看要求的东西\[\sum_{i=1}^{n}\sum_{j=1}^{m}[\sigma(gcd(i,j))\le a]\sigma(gcd(i,j))\] 然而\(\le a\)比较烦,可 ...

随机推荐

  1. Linux 线程实现机制分析 Linux 线程实现机制分析 Linux 线程模型的比较:LinuxThreads 和 NPTL

    Linux 线程实现机制分析 Linux 线程实现机制分析  Linux 线程模型的比较:LinuxThreads 和 NPTL http://www.ibm.com/developerworks/c ...

  2. Fetch 记录

    encodeURI()不会对本身属于URI的特殊字符进行编码,例如冒号.正斜杠.问号和井字号:而encodeURIComponent()则会对它发现的任何非标准字符进行编码. Fetch 请求body ...

  3. RocketMQ各组件介绍

    Rocket 架构主要分为4部分: Producer 消息发布者,支持分布式集群部署.Produer 通过 MQ 负载均衡模块选择相应 Broker 中的 queue 进行消息投递,投递过程支持快速失 ...

  4. poj/OpenJ_Bailian - 2528 离散化+线段树

    传送门:http://bailian.openjudge.cn/practice/2528?lang=en_US //http://poj.org/problem?id=2528 题意: 给你n长海报 ...

  5. MindV编入微软云计算中小企业解决方案

    鹰翔MindV思维导图软件基于云计算,曾作为windows azure云计算的一个样例介绍,收入中小企业解决方案中.http://www.microsoft.com/hk/smb/cloud/azur ...

  6. [reviewcode] 那些基础comments

    多次提醒我,为变量取个合适的名字, so cute person: Not a big deal, but try using variable names better than my_sa 每个参 ...

  7. CodeTypeDeclaration,CodeMemberProperty动态生成代码

    由于是CodeDom些列,所以先介绍几个CodeDom表达式: :CodeConditionStatement:判断语句即是if(condition){} else{},看最全的那个构造函数: pub ...

  8. SpringBoot源码学习系列之启动原理简介

    本博客通过debug方式简单跟一下Springboot application启动的源码,Springboot的启动源码是比较复杂的,本博客只是简单梳理一下源码,浅析其原理 为了方便跟源码,先找个Ap ...

  9. 使用SparkSql进行表的分析与统计

    # 背景 ​ 我们的数据挖掘平台对数据统计有比较迫切的需求,而Spark本身对数据统计已经做了一些工作,希望梳理一下Spark已经支持的数据统计功能,后期再进行扩展. # 准备数据 在参考文献6中下载 ...

  10. 「算法竞赛进阶指南」0x01 位运算 知识笔记

    二进制是计算机的根本! 你了解她它吗? int lowbit(int x) { return x&(-x);//x&(~x+1),~x=-1-x; } int __builtin_ct ...