题目

设 g ( x ) g(x) g(x)为 x x x的可重质因子数目, f ( x ) = 2 g ( x ) f(x)=2^{g(x)} f(x)=2g(x)。

求 ∑ i = 1 n f ( i ) \sum_{i=1}^nf(i) ∑i=1n​f(i)


正解

奇怪的数论知识增加了。

介绍一个叫power number的东西。power number是所有的质因子的指数都大于等于 2 2 2的数。

每个power number都可以表示成 a 2 b 3 a^2b^3 a2b3的形式,其中 a , b ∈ Z + a,b\in Z^+ a,b∈Z+

power number的数量是比较少的,所以有没有什么办法将值挂在power number上优化求值呢?

构造数论函数 u u u满足 u ∗ I ∗ I = f u*I*I=f u∗I∗I=f,即 u = f ∗ μ ∗ μ u=f*\mu*\mu u=f∗μ∗μ。容易得知 u u u也是个积性函数,并且手玩可以玩出 u ( p k ) u(p^k) u(pk)( p p p为质数)的表达式。然后就可以发现 u u u只有在power number处有值。

接下来推一下式子: ∑ i = 1 n f ( i ) = ∑ i = 1 n ∑ j u ( j ) ∑ a , b [ j a b = i ] = ∑ j u ( j ) ∑ a , b [ j a b ≤ n ] = ∑ j u ( j ) ∑ a , b [ a b ≤ n j ] \sum_{i=1}^nf(i)=\sum_{i=1}^n\sum_j u(j)\sum_{a,b} [jab=i]=\sum_j u(j)\sum_{a,b} [jab\le n]=\sum_j u(j)\sum_{a,b} [ab\le \frac{n}{j}] ∑i=1n​f(i)=∑i=1n​∑j​u(j)∑a,b​[jab=i]=∑j​u(j)∑a,b​[jab≤n]=∑j​u(j)∑a,b​[ab≤jn​]

记 d ( n ) = ∑ a , b [ a b ≤ n ] d(n)=\sum_{a,b}[ab\le n] d(n)=∑a,b​[ab≤n]。

这是一个经典问题。朴素求法是变成 ∑ i ⌊ n i ⌋ \sum_i \lfloor \frac{n}{i}\rfloor ∑i​⌊in​⌋,整除分块。

然后发现时间卡不过去……

有个小优化:画出函数图像 x y = n xy=n xy=n,我们要求函数图像和 x x x正半轴和 y y y正半轴之间的整点个数。这个东西可以看成一个正方形和两个斜边是弯的三角形。正方形的整点可以 O ( 1 ) O(1) O(1)算,然后求弯的三角形内的整点就可以直接枚举每一行,这里行数是 O ( n ) O(\sqrt n) O(n ​)的。

形式化地说,就是 2 ∑ i = 1 ⌊ n ⌋ ⌊ n i ⌋ + ⌊ n ⌋ 2 2\sum_{i=1}^{\lfloor \sqrt n \rfloor} \lfloor \frac{n}{i} \rfloor+\lfloor \sqrt n \rfloor ^2 2∑i=1⌊n ​⌋​⌊in​⌋+⌊n ​⌋2

左边的这个东西直接暴力算(不要整除分块!!!)。

(当然还有个更厉害的做法是在SB树上二分来拟合凸包,时间复杂度理论上可以达到 O ( n 1 3 lg ⁡ n ) O(n^{\frac{1}{3}}\lg n) O(n31​lgn))


代码

using namespace std;
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <cassert>
#define N 10000000
#define ll long long
ll n,sq,mo;
int p[N+1],np;
bool inp[N+1];
void init(int n){for (int i=2;i<=n;++i){if (!inp[i])p[++np]=i;for (int j=1;j<=np && i*p[j]<=n;++j){inp[i*p[j]]=1;if (i%p[j]==0)break;}}
}
ll calc(int k){return (1ll<<k-2)%mo;}
int d1[N+1],d2[N+1];
#define d(i) (i<=sq?d1[i]:d2[n/i])
int Sd(ll k){if (d(k)!=-1) return d(k);ll sk=sqrt(k),res=0;for (register int i=1;i<=sk;++i)(res+=k/i)%=mo;return d(k)=((res*2-sk*sk)%mo+mo)%mo;;
}
ll ans;
void dfs(int x,ll k,ll uk){(ans+=uk*Sd(k))%=mo;for (;x<=np && k>=(ll)p[x]*p[x];++x){   ll _k=k;k/=(ll)p[x]*p[x];for (int i=2;k;k/=p[x],++i)dfs(x+1,k,uk*calc(i)%mo);k=_k;}
}
int main(){freopen("remapping.in","r",stdin);freopen("remapping.out","w",stdout);scanf("%lld%d",&n,&mo);sq=sqrt(n);for (;(sq+1)*(sq+1)<=n;++sq);init(sq);memset(d1,255,sizeof(int)*(sq+1));memset(d2,255,sizeof(int)*(sq+1));dfs(1,n,1);printf("%lld\n",ans);return 0;
}

6785. 2020.08.07【NOI2020】模拟T3 重映射相关推荐

  1. 2020.08.08【NOIP提高组】模拟:奶牛的图片 总结

    2020.08.08[NOIP提高组]模拟:奶牛的图片 总结 Description Farmer John希望给他的 N ( 1 ≤ N ≤ 100 , 000 ) N(1\leq N\leq100 ...

  2. (十三:2020.08.28)CVPR 2015 追踪之论文纲要(译)

    CVPR 2020 追踪之论文纲要(修正于2020.08.27) 讲在前面 论文目录 讲在前面 论坛很多博客都对论文做了总结和分类,但就医学领域而言,对这些论文的筛选信息显然需要更加精细的把控,所以自 ...

  3. (十一:2020.08.28)CVPR 2017 追踪之论文纲要(译)

    CVPR 2017 追踪之论文纲要(修正于2020.08.28) 讲在前面 论文目录 讲在前面 论坛很多博客都对论文做了总结和分类,但就医学领域而言,对这些论文的筛选信息显然需要更加精细的把控,所以自 ...

  4. PYTHON学习笔记之(一)2020.08

    PYTHON学习笔记之(一)2020.08 Python基础 数据类型 常见的列表.字典,以及元组.集合. 1 列表 list 1.1 列表转换字符串 stu = ['王一', '李二', '张三'] ...

  5. (十四:2020.08.28)CVPR 2014 追踪之论文纲要(译)

    CVPR 2020 追踪之论文纲要(修正于2020.08.28) 讲在前面 论文目录 讲在前面 论坛很多博客都对论文做了总结和分类,但就医学领域而言,对这些论文的筛选信息显然需要更加精细的把控,所以自 ...

  6. 2020起重机械指挥模拟考试题库及起重机械指挥实操考试视频

    题库来源:安全生产模拟考试一点通公众号小程序 2020起重机械指挥模拟考试题库及起重机械指挥实操考试视频,包含起重机械指挥模拟考试题库答案解析及起重机械指挥实操考试视频练习.由安全生产模拟考试一点通公 ...

  7. 2020年防爆电气模拟考试及防爆电气实操考试视频

    题库来源:安全生产模拟考试一点通公众号小程序 2020年防爆电气模拟考试及防爆电气实操考试视频,包含防爆电气模拟考试答案和解析及防爆电气实操考试视频练习.由安全生产模拟考试一点通公众号结合国家防爆电气 ...

  8. 【2020】07 留校

    目录 系列文章 7月 5 9 10 11 12 15 17 18 19 20 22 24 25 26 27 28 29 30 31 系列文章 [2020]02 记录生活 [2020]03 从中二走向理 ...

  9. (九:2020.08.27)CVPR 2019 追踪之论文纲要(译)

    CVPR 2019 追踪之论文纲要(修正于2020.08.28) 讲在前面 论文目录 讲在前面 论坛很多博客都对论文做了总结和分类,但就医学领域而言,对这些论文的筛选信息显然需要更加精细的把控,所以自 ...

  10. 2020年高压电工模拟考试软件及高压电工理论考试

    题库来源:安全生产模拟考试一点通公众号小程序 2020年高压电工模拟考试软件及高压电工理论考试,包含高压电工模拟考试软件答案和解析及高压电工理论考试练习.由安全生产模拟考试一点通公众号结合国家高压电工 ...

最新文章

  1. C#WinForm制作异形窗体/控件
  2. 怎么样使用git克隆网站上的代码到本地文件夹(快捷)
  3. hdu 2196(经典树形dp)
  4. python读取word指定内容_python解析html提取数据,并生成word文档实例解析
  5. various,variable,varied,different, diverse的区别
  6. Asp.Net中用javascript实现弹出窗口永远居中
  7. 对vector中的数据排序
  8. WPF xml配置文件里面的大于小于号转义
  9. python字符串索引位置替换 不搞虚的 直上代码
  10. koa访问mysql数据库操作
  11. 《抉择与命运》读后感
  12. apicloud开发时的一些注意点
  13. 学习遗忘曲线_级联相关,被遗忘的学习架构
  14. 安卓下最强的3款pdf阅读器测评
  15. 机器学习(七):贝叶斯之新闻分类器
  16. MISC之常用编码总结
  17. 【巴什博弈 抢夺资源】
  18. 从Flink SQL doesn't support consuming update and delete changes 错误谈起
  19. SQL注入-01-什么是SQL注入?
  20. 对接淘宝天猫平台的第一篇

热门文章

  1. 1056. 股票买卖 III
  2. 奥运门票翻倍转让监管亮剑网络交易
  3. Ubuntu 下Caffe的安装过程 -- 之一
  4. 压力传感器压力指示不正确的解决办法
  5. css介绍和样式基础
  6. 当 Argo CD 遇上 Flux CD,谁才是 Kubernetes 上 GitOps 的真王者?
  7. linux as 5 安装,在Linuxas4u5下安装mysql的二进制源代码包
  8. Docker安装篇(一)
  9. 几句日语格言,不管是学习还是人生,请务必别放弃
  10. Windows界面——使用Custom Draw优雅的实现ListCtrl的重绘 - 一雨田的专栏 - CSDN博客