Solution -「HDU」Professor Ben
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)\)。显然可推广至结论:
\]
然后就可以当结论题切掉它。
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的更多相关文章
- Solution -「构造」专练
记录全思路过程和正解分析.全思路过程很 navie,不过很下饭不是嘛.会持续更新的(应该). 「CF1521E」Nastia and a Beautiful Matrix Thought. 要把所有数 ...
- Solution -「原创」Destiny
题目背景 题目背景与题目描述无关.签到愉快. 「冷」 他半靠在床沿,一缕感伤在透亮的眼眸间荡漾. 冷见惆怅而四散逃去.经历嘈杂喧嚣,感官早已麻木.冷又见空洞而乘隙而入.从里向外,这不是感官的范畴. 他 ...
- Solution -「HDU 6875」Yajilin
\(\mathcal{Description}\) Link.(HDU 裂开了先放个私链 awa.) 在一个 \(n\times n\) 的方格图中,格子 \((i,j)\) 有权值 \(w_ ...
- Solution -「HDU 5498」Tree
\(\mathcal{Description}\) link. 给定一个 \(n\) 个结点 \(m\) 条边的无向图,\(q\) 次操作每次随机选出一条边.问 \(q\) 条边去重后构成生成 ...
- Solution -「HDU 6643」Ridiculous Netizens
\(\mathcal{Description}\) Link. 给定一棵含有 \(n\) 个结点的树,点 \(u\) 有点权 \(w_u\),求树上非空连通块的数量,使得连通块内点权积 \(\ ...
- Solution -「HDU 1788」CRT again
\(\mathcal{Description}\) Link. 解同余方程组: \[x\equiv m_i-a\pmod{m_i} \] 其中 \(i=1,2,\dots,n\). \ ...
- Solution -「HDU #6566」The Hanged Man
\(\mathcal{Description}\) Link. 给定一棵含 \(n\) 个点的树,每个结点有两个权值 \(a\) 和 \(b\).对于 \(k\in[1,m]\),分别求 \[ ...
- Solution -「LOCAL」「cov. HDU 6864」找朋友
\(\mathcal{Description}\) Link.(几乎一致) 给定 \(n\) 个点 \(m\) 条边的仙人掌和起点 \(s\),边长度均为 \(1\).令 \(d(u)\) 表 ...
- Solution -「LOCAL」「cov. HDU 6816」折纸游戏
\(\mathcal{Description}\) Link(削弱版). \(n\) 张纸叠在一起对折 \(k\) 次,然后从上到下为每层的正反两面写上数字,求把纸重新摊平后每张纸上的数字序列 ...
随机推荐
- 论文解读(DAGNN)《Towards Deeper Graph Neural Networks》
论文信息 论文标题:Towards Deeper Graph Neural Networks论文作者:Meng Liu, Hongyang Gao, Shuiwang Ji论文来源:2020, KDD ...
- 1.8 常见Linux发行版本有哪些?
新手往往会被 Linux 众多的发行版本搞得一头雾水,我们首先来解释一下这个问题. 从技术上来说,李纳斯•托瓦兹开发的 Linux 只是一个内核.内核指的是一个提供设备驱动.文件系统.进程管理.网络通 ...
- 《你不知道的JS》上
- 【总结】2022GDOI普及组 没得游记
因为是线上,所以没得游记 Day -3 学校安排去7班上课,好耶! 上午全是主科,有一节生物 被你七班捧上天了 被你七班造谣说我暴踩Everyone,还传到九班,给我玩阴的是吧 下午模拟赛,初一第一 ...
- Windows UIA自动化测试框架学习--获取qq好友列表
前段时间应公司要求开发一款针对现有WPF程序的自动化测试工具,在网上查资料找了一段时间,发现用来做自动化测试的框架还是比较多的,比如python的两个模块pywinauto和uiautomation, ...
- K8S面试应知必回
目录 面试不要不懂装懂,不会就是不会,不可能每个人都接触过所有的知识! 1. 基础问题 1.1 Service是怎么关联Pod的?(课程Service章节) 1.2 HPA V1 V2的区别 1.3 ...
- 循环中的scanf处理了换行符怎么破
这种情况一般在循环中要求输入一个字符时容易出现问题. 问题在于缓冲区,缓冲区中存留了换行符,所以... 运行下面代码: int main(void){ char a=0; while(1){ scan ...
- Kafka 生产者解析
一.消息发送 1.1 数据生产流程 数据生产流程图解: Producer创建时,会创建⼀个Sender线程并设置为守护线程 ⽣产消息时,内部其实是异步流程:⽣产的消息先经过拦截器->序列化器-& ...
- 【算法】选择排序(Selection Sort)(二)
选择排序(Selection Sort) 选择排序(Selection-sort)是一种简单直观的排序算法.它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余 ...
- python文件操作拓展与认识函数
目录 文件内光标的移动(了解即可) 前言 控制光标移动seek()方法 文件的修改 函数 语法结构 简单的使用 作业 答案 文件内光标的移动(了解即可) 前言 在文件的内置方法中,read()方法是可 ...