传送门

Luogu

解题思路

很容易想到直接构造合法的数,但是这显然是会T飞的。

我们需要考虑这样一件事:

对于一个数 \(n\),对其进行质因数分解:

\[n=\sum_{i=1}^x p_i^{c_i}
\]

那么就会有:

\[\sigma(n)=\prod_{i=1}^x \sum_{j=1}^{c_i}p^j
\]

可以证明 \(\sigma(n)\) 和 \(n\) 同级,所以这个质因子 \(p_i\le \sqrt{S}\),所以我们可以直接爆搜出来所有小于 \(\sqrt{S}\) 的质数,特判一下每一层dfs时的 \(S-1\) 是否为质数,然后算答案。

细节注意事项

  • 爆搜题,你们懂得。。。

参考代码

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <cctype>
#include <cmath>
#include <ctime>
#define rg register
using namespace std;
template < typename T > inline void read(T& s) {
s = 0; int f = 0; char c = getchar();
while (!isdigit(c)) f |= c == '-', c = getchar();
while (isdigit(c)) s = s * 10 + (c ^ 48), c = getchar();
s = f ? -s : s;
} int vis[50000], num, prime[50000];
int cnt, ans[500000]; inline void seive() {
vis[1] = 1;
for (rg int i = 2; i < 50000; ++i) {
if (!vis[i]) prime[++num] = i;
for (rg int j = 1; j <= num && i * prime[j] < 50000; ++j) {
vis[i * prime[j]] = 1;
if (i % prime[j] == 0) break;
}
}
} inline bool isprime(int x) {
if (x <= 1) return 0;
if (x == 2) return 1;
for (rg int i = 2; i * i <= x; ++i)
if (x % i == 0) return 0;
return 1;
} inline void dfs(int x, int i, int s) {
if (x == 1) { ans[++cnt] = s; return; }
if (isprime(x - 1) && x > prime[i]) ans[++cnt] = s * (x - 1);
for (rg int j = i; prime[j] * prime[j] <= x; ++j) {
int last = prime[j], sum = prime[j] + 1;
for (; sum <= x; last *= prime[j], sum += last)
if (x % sum == 0) dfs(x / sum, j + 1, s * last);
}
} inline void solve(int x) {
if (x == 1) { puts("1"), puts("1"); return ; }
cnt = 0, dfs(x, 1, 1);
printf("%d\n", cnt);
sort(ans + 1, ans + cnt + 1);
for (rg int i = 1; i <= cnt; ++i)
printf("%d%c", ans[i], " \n"[i == cnt]);
} int main() {
#ifndef ONLINE_JUDGE
freopen("in.in", "r", stdin);
#endif
seive();
int n;
while (scanf("%d", &n) != EOF) solve(n);
return 0;
}

完结撒花 \(qwq\)

「JLOI2014」聪明的燕姿的更多相关文章

  1. LOJ #2234. 「JLOI2014」聪明的燕姿(搜索 + 数论)

    题意 给出一个数 \(S\) ,输出所有约数和等于 \(S\) 的数. \(S \le 2 \times 10^9\) ,数据组数 \(\le 100\) . 题解 首先用约数和定理: \[ \beg ...

  2. BZOJ3629(JLOI2014)聪明的燕姿

    (⊙﹏⊙)我交了好久,有坑啊...(如果没有匹配的话,即输出0种情况要记得换行...) 就是搜索,加上一点数论,并不太难... #include<cstdio> #include<c ...

  3. BZOJ_3629_[JLOI2014]聪明的燕姿_dfs

    BZOJ_3629_[JLOI2014]聪明的燕姿_dfs Description 阴天傍晚车窗外 未来有一个人在等待 向左向右向前看 爱要拐几个弯才来 我遇见谁会有怎样的对白 我等的人他在多远的未来 ...

  4. bzoj3629 / P4397 [JLOI2014]聪明的燕姿

    P4397 [JLOI2014]聪明的燕姿 根据唯一分解定理 $n=q_{1}^{p_{1}}*q_{2}^{p_{2}}*q_{3}^{p_{3}}*......*q_{m}^{p_{m}}$ 而$ ...

  5. P4397 [JLOI2014]聪明的燕姿

    P4397 [JLOI2014]聪明的燕姿 题目背景 阴天傍晚车窗外 未来有一个人在等待 向左向右向前看 爱要拐几个弯才来 我遇见谁会有怎样的对白 我等的人他在多远的未来 我听见风来自地铁和人海 我排 ...

  6. 【LG4397】[JLOI2014]聪明的燕姿

    [LG4397][JLOI2014]聪明的燕姿 题面 洛谷 题解 考虑到约数和函数\(\sigma = \prod (1+p_i+...+p_i^{r_i})\),直接爆搜把所有数搜出来即可. 爆搜过 ...

  7. AcWing1296. 聪明的燕姿

    聪明的燕姿 解题思路: 首先我们肯定要用到约数之和定理 但是有个问题就是要怎么用 根据经验得知,约数最多也就六七个左右,不然直接就超了s的范围.所以我们考虑用爆搜来做 但是用爆搜的话还是要优化一下思路 ...

  8. 「JLOI2014」松鼠的新家

    「JLOI2014」松鼠的新家 传送门 两种做法: 树上差分 \(O(n)\) 树链剖分 \(O(nlogn)\) 树剖比较好写而且无脑,树上差分复杂度优秀一些但是会有点难调. 这里给出树剖写法: 唯 ...

  9. 聪明的燕姿[JLOI2014]

    题目描述 阴天傍晚车窗外 未来有一个人在等待 向左向右向前看 爱要拐几个弯才来 我遇见谁会有怎样的对白 我等的人他在多远的未来 我听见风来自地铁和人海 我排着队拿着爱的号码牌 城市中人们总是拿着号码牌 ...

随机推荐

  1. twisted reactor 实现源码解析

    twisted reactor 实现源码解析 1.      reactor源码解析 1.1.    案例分析代码: from twisted.internet import protocol fro ...

  2. HDU3173 Dominos

    单向并查集,问至少给几个点可以遍历全图,连通块数量n,入度为0的点的数量m,取max(n,m)~ #include<cstdio> #include<algorithm> #i ...

  3. centos 8 cockpit系统监控

    步骤: 1.激活cockpit服务 2.启动cockpit 3.查看cockpit服务是否启动 4.浏览器访问http://192.168.1.10:9090(用户名root,密码123) 5.查看系 ...

  4. ES6-let声明变量

    在es6中除了var还可以用let申明变量,并且建议使用let而不要再使用var,两者有以下区别: 1.let不能重复声明变量 var name = 'tom'; var name = 'jack'; ...

  5. JSP页面输入框赋值换行显示问题

    <input type="hidden" id="${command.yhzlId}" value="${command.yhzx },${co ...

  6. [2/100] MySQL在Windows下安装及一些问题

    mysql 是RDBMS(关系型数据库) 其他: redis 一般做缓存用 mangoDB 一般做爬虫用 国内镜像下载地址: http://mirrors.sohu.com/mysql/MySQL-8 ...

  7. SAM(后缀自动机)总结

    “写sam是肯定会去写的,这样才学的了字符串,后缀数组又不会用 >ω<, sam套上数据结构的感觉就像回家一样! 里面又能剖分又能线段树合并,调试又好调,我爱死这种写法了 !qwq” SA ...

  8. Live2d技术

    保存一些关于Live2d技术的博文或模型资源,有空研究研究. 什么是 live2d?:https://baike.baidu.com/item/Live2D/8496493 1.https://www ...

  9. centos7使用docker制作tomcat本地镜像

    1.安装Docker 安装docker前请确认当前linux的内核版必须是3.10及以上 命令: uname  -r 1).yum install -y yum-utils device-mapper ...

  10. 「JLOI2012」树

    「JLOI2012」树 传送门 不得不说这题的数据是真的水... 我们可以想到很明确的一条思路:枚举每一个点向根节点跳,知道路径和不小于 \(s\),恰好等于 \(s\) 就直接加答案. 跳的过程可以 ...