bzoj_3529 数表
首先不考虑a的限制
设 S(i)为i的约数和
据约数和定理
先将i分解因数
$$ i=p_1^{q_1}p_2^{q_2}...p_k^{q_k}$$
$$S(i)=\prod_{i=1}^k\sum_{j=0}^{q_i}p_i^j$$
当i与j互质时,S(i*j)=S(i)*S(j),满足积性函数性质,所以可以线性删出来
设g(i)为i最小质因数各幂次的加和
1.当i是质数,g(i)=S(i)=i+1
2.当i不与p(质数)互质是,S(i*p)=S(i)/g(i)*g(i*p)
3.当i与p互质时,S(i*p)=S(i)*(p+1)
(具体可见code)
题目让求$$ans=\sum_{i=1 j=1}^{i<=n j<=m}S(gcd(i,j))$$
设f(i)为gcd(x,y)==i的(x,y)数
F(i)为i|gcd(x,y)的(x,y)数
$$ f(i)=\sum_{i|d}\mu(\frac{d}{i})F(d)$$
$$ f(i)=\sum_{i|d}\mu(\frac{d}{i})\lfloor\frac{n}{d}\rfloor\lfloor\frac{m}{i}\rfloor$$
那么
$$ans=\sum_{i=1}^{min(n,m)}S(i)f(i)$$
$$(枚举约数) ans=\sum_{i=1}^{min(n,m)}S(i)\sum_{i|d}\mu(\frac{d}{i})\lfloor\frac{n}{d}\rfloor\lfloor\frac{m}{d}\rfloor$$
$$(枚举d) ans=\sum_{d=1}^{min(n,m)}\lfloor\frac{n}{d}\rfloor\lfloor\frac{m}{d}\rfloor\sum_{i|d}S(i)\mu(\frac{d}{i})$$
然后考虑加上a的限制条件,发现只要离线处理,用树状数组维护后面一项就行了
#include <cstdio> #include <cstring> #include <cstdlib> #include <iostream> #include <cmath> #include <algorithm> #define ll long long #define mem(a,b) memset(a,b,sizeof(a)) using namespace std; const int M=20006; const int N=100006;struct VV {int v,order;bool friend operator < (VV a,VV b){return a.v<b.v;} }ji[N];int prime[N],cnt; bool he[N]; int mu[N],g[N];void chu() {mu[1]=1;g[1]=1;ji[1].v=1;ji[1].order=1;for(int i=2;i<N;++i){ji[i].order=i;if(!he[i]){prime[++cnt]=i;mu[i]=-1;g[i]=i+1;ji[i].v=i+1;}for(int j=1;j<=cnt&&prime[j]*i<N;++j){he[i*prime[j]]=1;if(i%prime[j]==0){mu[i*prime[j]]=0;g[i*prime[j]]=g[i]*prime[j]+1;ji[i*prime[j]].v=ji[i].v/g[i]*g[i*prime[j]];break;}mu[i*prime[j]]=-mu[i];g[i*prime[j]]=prime[j]+1;ji[i*prime[j]].v=ji[i].v*(prime[j]+1);}}/*printf("\n");for(int i=1;i<=10;++i)printf("%d ",ji[i].v);printf("\n");*/sort(ji+1,ji+N); }struct Q {int n,m,A;int order;bool friend operator < (Q a,Q b){return a.A<b.A;} }q[M];int an[M]; int m;int c[N]; void add(int pos,int val) {for(int i=pos;i<N;i+=(i&(-i)) )c[i]+=val; } int qq(int pos) {int ans=0;for(int i=pos;i>0;i-=(i&(-i)) )ans+=c[i];return ans; }inline void mk(int pos,int val) {for(int i=pos;i<N;i+=pos ){add(i,val*mu[i/pos]);}//cout<<1; }int get(int n,int m) {if(n>m)swap(n,m);int nx;int ans=0;for(int i=1;i<=n;){nx=min( n/(n/i),m/(m/i) );ans+=(n/i)*(m/i)*( qq(nx)-qq(i-1) );i=nx+1;}return ans; }void work() {int IINF=(1<<31)-1,now=1;for(int i=1;i<=m;++i){while(ji[now].v<=q[i].A)mk(ji[now].order,ji[now].v),++now;an[q[i].order]=get(q[i].n,q[i].m)&IINF;} }int main(){//freopen("in.in","r",stdin);freopen("sdoi2014shb.in","r",stdin);freopen("sdoi2014shb.out","w",stdout);//freopen("out.out","w",stdout);chu();scanf("%d",&m);for(int i=1;i<=m;++i){q[i].order=i;scanf("%d%d%d",&q[i].n,&q[i].m,&q[i].A);}sort(q+1,q+1+m);work();for(int i=1;i<=m;++i)printf("%d\n",an[i] ); }
bzoj_3529
转载于:https://www.cnblogs.com/A-LEAF/p/7639549.html
bzoj_3529 数表相关推荐
- C++对象的内存布局1---基础篇----C++ 虚函数表解析
[-] 前言 虚函数表 一般继承(无虚函数覆盖) 一般继承(有虚函数覆盖) 多重继承(无虚函数覆盖) 多重继承(有虚函数覆盖) 安全性 结束语 附录一:VC中查看虚函数表 附录 二:例程 前言 C++ ...
- C++中的虚函数表介绍
在C++语言中,当我们使用基类的引用或指针调用一个虚成员函数时会执行动态绑定.因为我们直到运行时才能知道到底调用了哪个版本的虚函数,所以所有虚函数都必须有定义.通常情况下,如果我们不使 ...
- 虚函数表剖析,网上转的,呵呵
http://www.cppblog.com/xczhang/archive/2008/01/20/41508.html C++虚函数表解析(转) C++中的虚函数的作用主要是实现了多态的机制.关于多 ...
- (每日一题)P3312 [SDOI2014]数表(经典莫比乌斯反演 + 树状数组维护离线询问)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 每日一题(莫反 / 多项式 / 母函数 / 群论) 2021.4.11 莫反 P3312 [SDOI2 ...
- python使用lassocv生成影像组学(radiomic)模型的系数表
python使用lassocv生成影像组学(radiomic)模型的系数表 目录 python使用lassocv生成影像组学(radiomic)模型的系数表 #lassocv模型构建
- C++ 虚函数表解析
转载自 https://blog.csdn.net/zhou191954/article/details/44919479 C++ 虚函数表解析 前言 C++中的虚函数的作用主要是实现了多态的机制.关 ...
- Matlab200以内所有质数,Matlab 中求质数表
在利用 fft 变换分析频谱时,常要考虑将采样时间和信号的周期设为互质的关系.为了方便的找到所选的质数,我们可以利用 matlab 自带的质数表函数 primes() 来加以查找. 下面所示为利用 p ...
- C++对象内存布局--①测试虚函数表属于类
C++对象内存布局--①测试虚函数表属于类 测试1:同一个类的多个对象共享同一张虚函数表. //虚函数表.cpp //2010年8月18日 //测试虚函数表,说明虚函数表属于类所有.同一个类的多个 ...
- C++迟后联编和虚函数表
先看一个题目: class Base { public:virtual void Show(int x){cout << "In Base class, int x = &quo ...
- 虚函数表 vtable
如果一个类包含了虚函数,那么在创建对象时会额外增加一张表,表中的每一项都是虚函数的入口地址.这张表就是虚函数表,也称为 vtable. 可以认为虚函数表是一个数组. 为了把对象和虚函数表关联起来,编译 ...
最新文章
- android网络请求 post
- 从HttpServletRequest获取完整的请求路径
- iPhone/Mac Objective-C内存管理教程和原理剖析
- 音视频技术开发周刊 60期
- Java程序通过批处理文件定时执行
- 面试官 | count(1)、count(*) 、count(列名) 有什么区别?
- 暴露年龄系列!这些手机系统 你用过几个?
- http服务器异步响应,4.异步非阻塞多进程的 Http 服务器
- Collections about Deep Learning
- 以太坊 2.0、分片、DAG、链下状态通道……概述区块链可扩展性的解决方案!
- 【拓展】一个故事讲完CPU的工作原理
- 在windows 2008 R2上无法运行vc 2015的程序,显示缺少api-ms-win-crt-string-|1-1-0.dll的解决
- 微软商店打开失败 - 错误代码 - 0x80131500
- 基于脉动阵列实现矩阵卷积(FPGA)
- python机器视觉培训——Python的安装
- IMAGE_IMPORT_DESCRIPTOR
- java 内存 检测_Java内存使用情况检测代码
- vue.js中在js获取指定日期到现在时间的天数
- 微带贴片天线的分析方法-空腔模型法
- ChatGPT注册全流程
热门文章
- 性能计数器驱动_Vulkan 探密:AMD Vulkan 开源驱动源码解析-零
- 计算机学院特色迎新标语,开学迎新口号
- c语言从栈分配地址函数,C语言 子函数return局部变量和栈地址 机制
- c++如何快速写出get set_如何快速写出产品文案?(4大核心方法)
- 联想微型计算机改win76,装不了Win7?采用第六代酷睿处理器的电脑改装Win7的方法...
- dio设置自定义post请求_Flutter用dio封装http网络请求,设置统一的请求地址、headers及处理返回内容...
- python svm超参数_为了能早点买房,我用 Python 预测房价走势!
- C/C++[codeup 1934,1932,1935]查找
- 极客大学架构师训练营 组件设计原则 安全架构 防火墙ModSecurity 第21课 听课总结
- SwiftUI 生命周期onAppear,onDisappear