Description

有 \(Q\) 个询问。每次给定一个正整数 \(n\),求它的所有因数的质因数个数的和。


Solution

就讲中间的一个 Trick。

我们定义正整数 \(x\) 有 \(f(x)\) 个因数,且存在一函数 \(g(x) = \sum_{i | x} f^3(i)\),显然 \(g(x)\) 即 \(x\) 对应的答案。

那么,若 \(x = p^a\),则由因数个数定理可得: \(f(x) = a + 1\)。

且其因数集合可表示为:\(\{p^0, p^1, ... , p^a\}\)。故有 \(g(x) = \sum_{i = 0}^{a} f^3(p^i) = \sum_{i = 0}^{a} (i + 1)^3\)。

将 \(x\) 的范围加以推广。

若 \(x = p^a q^b\),则 \(f(x) = (a + 1) \times (b + 1)\)。

且其因数集合可表示为:\(\{\{p^0 q^0, p^0 q^1, ..., p^0 q^b\}, \{p^1 q^0, p^1 q^1, ..., p^1 q^b\}, ... , \{p^a q^0, p^a q^1, ..., p^a q^b\}\}\)。故有 \(g(x) = \sum_{i = 0}^{a}\sum_{j = 0}^{b} f^3(p^i q^j) = \sum_{i = 0}^{a}\sum_{j = 0}^{b} (i + 1)^3 (j + 1)^3\)。

注意到 \(g(p^a) = \sum_{i = 0}^{a} (i + 1)^3, g(q^b) = \sum_{j = 0}^{b} (j + 1)^3\)。

所以有 \(g(x) = g(p^a q^b) = g(p^a) \times g(q^b)\)。显然可推广至结论:

\[g(x) = g(p_1^{a_1} p_2^{a_2} ... p_k^{a_k}) = \prod_{i = 1}^{k} g(p_i^{a_i})
\]

然后就可以当结论题切掉它。


Code

#include <cstdio>

typedef long long LL;
int Max(int x, int y) { return x > y ? x : y; }
int Min(int x, int y) { return x < y ? x : y; }
int Abs(int x) { return x < 0 ? -x : x; } int read() {
int k = 1, x = 0;
char s = getchar();
while (s < '0' || s > '9') {
if (s == '-')
k = -1;
s = getchar();
}
while (s >= '0' && s <= '9') {
x = (x << 3) + (x << 1) + s - '0';
s = getchar();
}
return x * k;
} void write(LL x) {
if (x < 0) {
putchar('-');
x = -x;
}
if (x > 9)
write(x / 10);
putchar(x % 10 + '0');
} void print(LL x, char s) {
write(x);
putchar(s);
} const int MAXN = 5e6 + 5; bool flag[MAXN];
int num[MAXN], len = 0;
LL w[MAXN]; void Euler(int n) {
flag[1] = true;
for (int i = 2; i <= n; i++) {
if (!flag[i])
num[++len] = i;
for (int j = 1; j <= len; j++) {
if (i * num[j] > n)
break;
flag[i * num[j]] = true;
if (i % num[j] == 0)
break;
}
}
} int main() {
Euler(MAXN - 5);
for (int i = 1; i < 23; i++)
for (int j = 0; j <= i; j++) w[i] += (1 + j) * (1 + j) * (1 + j);
int n = read();
for (int i = 1, x; i <= n; i++) {
x = read();
LL res = 1;
for (int j = 1; num[j] * num[j] <= x; j++) {
int cnt = 0;
while (x % num[j] == 0) {
x /= num[j];
cnt++;
}
res *= w[cnt];
}
if (x > 1)
res *= w[1];
print(res, '\n');
}
return 0;
}

Solution -「HDU」Professor Ben的更多相关文章

  1. Solution -「构造」专练

    记录全思路过程和正解分析.全思路过程很 navie,不过很下饭不是嘛.会持续更新的(应该). 「CF1521E」Nastia and a Beautiful Matrix Thought. 要把所有数 ...

  2. Solution -「原创」Destiny

    题目背景 题目背景与题目描述无关.签到愉快. 「冷」 他半靠在床沿,一缕感伤在透亮的眼眸间荡漾. 冷见惆怅而四散逃去.经历嘈杂喧嚣,感官早已麻木.冷又见空洞而乘隙而入.从里向外,这不是感官的范畴. 他 ...

  3. Solution -「HDU 6875」Yajilin

    \(\mathcal{Description}\)   Link.(HDU 裂开了先放个私链 awa.)   在一个 \(n\times n\) 的方格图中,格子 \((i,j)\) 有权值 \(w_ ...

  4. Solution -「HDU 5498」Tree

    \(\mathcal{Description}\)   link.   给定一个 \(n\) 个结点 \(m\) 条边的无向图,\(q\) 次操作每次随机选出一条边.问 \(q\) 条边去重后构成生成 ...

  5. Solution -「HDU 6643」Ridiculous Netizens

    \(\mathcal{Description}\)   Link.   给定一棵含有 \(n\) 个结点的树,点 \(u\) 有点权 \(w_u\),求树上非空连通块的数量,使得连通块内点权积 \(\ ...

  6. Solution -「HDU 1788」CRT again

    \(\mathcal{Description}\)   Link.   解同余方程组: \[x\equiv m_i-a\pmod{m_i} \]   其中 \(i=1,2,\dots,n\).   \ ...

  7. Solution -「HDU #6566」The Hanged Man

    \(\mathcal{Description}\)   Link.   给定一棵含 \(n\) 个点的树,每个结点有两个权值 \(a\) 和 \(b\).对于 \(k\in[1,m]\),分别求 \[ ...

  8. Solution -「LOCAL」「cov. HDU 6864」找朋友

    \(\mathcal{Description}\)   Link.(几乎一致)   给定 \(n\) 个点 \(m\) 条边的仙人掌和起点 \(s\),边长度均为 \(1\).令 \(d(u)\) 表 ...

  9. Solution -「LOCAL」「cov. HDU 6816」折纸游戏

    \(\mathcal{Description}\)   Link(削弱版).   \(n\) 张纸叠在一起对折 \(k\) 次,然后从上到下为每层的正反两面写上数字,求把纸重新摊平后每张纸上的数字序列 ...

随机推荐

  1. Linux进程总结

    一个执着于技术的公众号 进程 进程,是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.它的执行需要系统分配资源创建实体之后,才能进行.举个例子: ...

  2. 百度3D离线地图开发,3D离线地图开发,百度地图离线开发

    3D离线地图介绍(3D离线采用矢量数据作为地图基础,可保持地图数据最新) 一.开发中引用3D离线地图(可独立部署通过内外IP+端口进行访问,也可拷贝js库文件到项目中通过绝对路径访问) 1).离线AP ...

  3. this 去哪?

    this 去哪? 本文写于 2020 年 4 月 26 日 let obj = { foo() { console.log(this) }, } let bar = obj.foo obj.foo() ...

  4. 栈在go语言中实现,及解决388.文件的最长绝对路径的思路

    今天在LeetCode刷每日一题,遇到了388. 文件的最长绝对路径的思路,这道题让我想到了系统的目录是栈结构,果然在题解中找到了栈的解法(暴力半天没出来,跑去看题解了QWQ). 所以我就捎带复习了一 ...

  5. Angular中懒加载一个模块并动态创建显示该模块下声明的组件

    angular中支持可以通过路由来懒加载某些页面模块已达到减少首屏尺寸, 提高首屏加载速度的目的. 但是这种通过路由的方式有时候是无法满足需求的. 比如, 点击一个按钮后显示一行工具栏, 这个工具栏组 ...

  6. layui数据表格导入数据

    作为一个后端程序员,前端做的确实很丑,所以就学习了一下layui框架的使用.数据表格主要的问题就是传输数据的问题,这里我用我的前后端代码来做一个实际的分解. 前端部分 可以到layui官网示例中找到数 ...

  7. 好客租房53-context的使用

    app组件要传递给child组件 该如何处理 更好的姿势 跨组件传递数据 Provider 用来提供数据 Consumer用来消费数据 1调用React.createContext() 创建provi ...

  8. Cocos---大作业:简单H5小游戏

    Cocos大作业:传统美食分分类 知识点清单: 场景切换,监听时间,碰撞组件及回调,拖动角色移动,分数记录,随机数和定时器,背景音乐控制,资源池控制,预制体,进度条... 源码+q:143144832 ...

  9. 115_Power Pivot之HR薪酬计算:公积金、社保、个税、实发工资相关

    博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一.背景 1.之前写了一个关于入离调转的pp应用,现在个税新增专项附加扣除项目,借此写一个关于薪酬计算的案例: 2.本案例 ...

  10. vue ui 创建vue项目 没反应的解决办法 2021

    1.升级vue 脚手架 即可   2.再  vue ui  创建项目 cnpm i -g @vue/cli