式子化出来是$\sum_{T=1}^m{\lfloor}\frac{n}{T}{\rfloor}{\lfloor}\frac{m}{T}{\rfloor}\sum_{k|T}\mu(\frac{T}{k})[\sigma(k)<=a]\sigma(k)$

如果没有a的限制的话,显然只要把后面那个sigma预处理出来

有了a的限制呢?考虑把询问按a从小到大排序,然后每次把所有满足$lasta<\sigma(k)<=nowa$(lasta指上个询问的a,nowa指当前询问的a)的加入后面那部分的贡献(开始时对于每个T预处理有哪些k满足$\sigma(k)=T$,这里就暴力枚举k使得$\sigma(k)$=当前要加入贡献的值,再暴力枚举k的倍数更新);用树状数组维护前缀和;复杂度是n*log^2+T*sqrt*log

错误记录:

1.121行<=n写成<=m;导致除以0;本地测试的时候只用了n=m的数据,所以没测出来

2.108行没规定这个<=500000

 #include<cstdio>
#include<algorithm>
#include<cstring>
#include<vector>
using namespace std;
#define fi first
#define se second
#define mp make_pair
#define pb push_back
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
const ll N=;
const ll M=;
struct Q
{
ll n,m,a,num;
}q[M+];
ll qq;
ll ans[M+];
ll mu[N+],len,prime[N+];
ll f1[N+],f2[N+],h[N+];
//分别为最小质因子的p^k,1+p^0+p^1+..+p^k,函数值
vector<int> dd[];
bool nprime[N+];
bool c1(const Q &a,const Q &b) {return a.a<b.a;}
const ll md=1LL<<;
#define lowbit(x) ((x)&(-x))
ll d[N+];
void add(ll p,ll x)
{
for(;p<=N;p+=lowbit(p)) d[p]+=x;
}
ll sum(ll p)
{
ll ans=;
for(;p>;p-=lowbit(p)) ans+=d[p];
return ans;
}
//ll Mod(ll a,ll b)
//{
// if(a>=0) return a%b;
// else if(a%b==0) return 0;
// else return b+a%b;
//}
int main()
{
ll i,j,k,n,m,an;
mu[]=;h[]=;
for(i=;i<=N;i++)
{
if(!nprime[i])
{
prime[++len]=i;mu[i]=-;
f1[i]=i;f2[i]=i+;h[i]=i+;
}
for(j=;j<=len&&i*prime[j]<=N;j++)
{
nprime[i*prime[j]]=;
if(i%prime[j]==)
{
mu[i*prime[j]]=;
f1[i*prime[j]]=f1[i]*prime[j];
f2[i*prime[j]]=f2[i]+f1[i*prime[j]];
h[i*prime[j]]=h[i]/f2[i]*f2[i*prime[j]];
break;
}
else
{
mu[i*prime[j]]=-mu[i];
f1[i*prime[j]]=prime[j];
f2[i*prime[j]]=+prime[j];
h[i*prime[j]]=h[i]*f2[i*prime[j]];
}
}
}
for(i=;i<=N;i++)
dd[h[i]].pb(i);
/*
ll ttt=0;
for(i=1;i<=20000;i++) ttt=max(ttt,h[i]);
printf("%lld",ttt);
{
ll a,n,m,k;
while(1)
{
scanf("%lld%lld%lld",&n,&m,&a);
if(n>m) swap(n,m);
ll ans=0;
for(ll T=1;T<=m;T++)
{
ll a1=0;
for(k=1;k<=T;k++)
if(T%k==0)
{
a1+=mu[T/k]*(h[k]<=a)*h[k];
}
ans+=(n/T)*(m/T)*a1;
}
printf("%lld\n",ans);
}
}*/
scanf("%lld",&qq);
for(i=;i<=qq;i++) scanf("%lld%lld%lld",&q[i].n,&q[i].m,&q[i].a),q[i].num=i;
sort(q+,q+qq+,c1);
for(i=,j=;i<=qq;i++)
{
while(j+<=q[i].a&&j+<=)
{
j++;
for(auto d:dd[j])
{
for(k=d;k<=N;k+=d)
{
add(k,mu[k/d]*j);
}
}
}
if(q[i].n>q[i].m) swap(q[i].n,q[i].m);
n=q[i].n;m=q[i].m;an=;
for(ll i=,j;i<=n;i=j+)
{
j=min(n/(n/i),m/(m/i));
an+=(n/i)*(m/i)*(sum(j)-sum(i-));
}
ans[q[i].num]=an;
//printf("a%lld\n",an);
}
for(i=;i<=qq;i++) printf("%lld\n",ans[i]%md);
return ;
}

洛谷 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. [bzoj3529] [洛谷P3312] [Sdoi2014] 数表

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

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

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

  5. 洛咕3312 [SDOI2014]数表

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

  6. P3312 [SDOI2014]数表

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

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

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

  8. luogu P3312 [SDOI2014]数表

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

  9. 洛谷P3317 [SDOI2014]重建 [Matrix-Tree定理]

    传送门 思路 相信很多人像我一样想直接搞Matrix-Tree定理,而且还过了样例,然后交上去一分没有. 但不管怎样这还是对我们的思路有一定启发的. 用Matrix-Tree定理搞,求出的答案是 \[ ...

随机推荐

  1. (转)CSS3全局实现所有元素的内边距和边框不增加

    全局设置 border-box 很好,首先它符合直觉,其次它可以省去一次又一次的加加减减 它还有一个关键作用——让有边框的盒子正常使用百分比宽度.但是使用了 border-box 可能会与一些依赖默认 ...

  2. SKStoreReviewController之程序内评价

    在iOS 10.3出现之前,App实现评价方式一般有两种: (一)deep link调用.在app 链接地址后面拼上action=write-review这种方式可以实现程序内评价: (二)App跳转 ...

  3. java zip压缩优化版 解决压缩后文件一直被占用无法删除

    最近进行zip操作,从网上找到一个处理方法,但是经过试验存在一些bug,主要是文件流的申明存在问题,导致jvm一直占用文件而不释放,特意把自己修改的发出来,已备记录 import java.io.Bu ...

  4. java学习方向及主要内容

    Java分成J2ME(移动应用开发),J2SE(桌面应用开发),J2EE(Web企业级应用),所以java并不是单机版的,只是面向对象语言.建议如果学习java体系的话可以这样去学习: *第一阶段:J ...

  5. NBUT 1222 English Game(trie树+DP)

    [1222] English Game 时间限制: 1000 ms 内存限制: 131072 K 问题描写叙述 This English game is a simple English words ...

  6. android checkbox radiogroup optionmenu dialog

    \n换行 UI visible:View.INVISIBLE 不可见,占用空间,View.GONE  不可见,不占用空间 菜单 res右击新建menu xml 自动新建menu文件夹 context ...

  7. button在firefox 和 ie 下的问题

    最近做了一个关于数据库管理的项目,因为不用考虑ie9以下的兼容性,所以一股脑的写完啦,到测试的时候发现了一个bug IE和火狐下有个模块关闭按钮的hover没有反应,ie不行就算了,火狐怎么也不行?我 ...

  8. elasticsearch索引查询,日志搜素

    索引查询 http://10.199.137.115:9200/_cat/indices?format=json 返回json字符串的索引状态 增加索引名称过滤 http://10.199.137.1 ...

  9. 计算机学院大学生程序设计竞赛(2015’12)Happy Value

    Happy Value Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

  10. 一步一步学Silverlight 2系列(31):图形图像综合实例—实现水中倒影效果

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...