「JLOI2014」聪明的燕姿
传送门
Luogu
解题思路
很容易想到直接构造合法的数,但是这显然是会T飞的。
我们需要考虑这样一件事:
对于一个数 \(n\),对其进行质因数分解:
\]
那么就会有:
\]
可以证明 \(\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」聪明的燕姿的更多相关文章
- LOJ #2234. 「JLOI2014」聪明的燕姿(搜索 + 数论)
		
题意 给出一个数 \(S\) ,输出所有约数和等于 \(S\) 的数. \(S \le 2 \times 10^9\) ,数据组数 \(\le 100\) . 题解 首先用约数和定理: \[ \beg ...
 - BZOJ3629(JLOI2014)聪明的燕姿
		
(⊙﹏⊙)我交了好久,有坑啊...(如果没有匹配的话,即输出0种情况要记得换行...) 就是搜索,加上一点数论,并不太难... #include<cstdio> #include<c ...
 - BZOJ_3629_[JLOI2014]聪明的燕姿_dfs
		
BZOJ_3629_[JLOI2014]聪明的燕姿_dfs Description 阴天傍晚车窗外 未来有一个人在等待 向左向右向前看 爱要拐几个弯才来 我遇见谁会有怎样的对白 我等的人他在多远的未来 ...
 - bzoj3629 / P4397 [JLOI2014]聪明的燕姿
		
P4397 [JLOI2014]聪明的燕姿 根据唯一分解定理 $n=q_{1}^{p_{1}}*q_{2}^{p_{2}}*q_{3}^{p_{3}}*......*q_{m}^{p_{m}}$ 而$ ...
 - P4397 [JLOI2014]聪明的燕姿
		
P4397 [JLOI2014]聪明的燕姿 题目背景 阴天傍晚车窗外 未来有一个人在等待 向左向右向前看 爱要拐几个弯才来 我遇见谁会有怎样的对白 我等的人他在多远的未来 我听见风来自地铁和人海 我排 ...
 - 【LG4397】[JLOI2014]聪明的燕姿
		
[LG4397][JLOI2014]聪明的燕姿 题面 洛谷 题解 考虑到约数和函数\(\sigma = \prod (1+p_i+...+p_i^{r_i})\),直接爆搜把所有数搜出来即可. 爆搜过 ...
 - AcWing1296. 聪明的燕姿
		
聪明的燕姿 解题思路: 首先我们肯定要用到约数之和定理 但是有个问题就是要怎么用 根据经验得知,约数最多也就六七个左右,不然直接就超了s的范围.所以我们考虑用爆搜来做 但是用爆搜的话还是要优化一下思路 ...
 - 「JLOI2014」松鼠的新家
		
「JLOI2014」松鼠的新家 传送门 两种做法: 树上差分 \(O(n)\) 树链剖分 \(O(nlogn)\) 树剖比较好写而且无脑,树上差分复杂度优秀一些但是会有点难调. 这里给出树剖写法: 唯 ...
 - 聪明的燕姿[JLOI2014]
		
题目描述 阴天傍晚车窗外 未来有一个人在等待 向左向右向前看 爱要拐几个弯才来 我遇见谁会有怎样的对白 我等的人他在多远的未来 我听见风来自地铁和人海 我排着队拿着爱的号码牌 城市中人们总是拿着号码牌 ...
 
随机推荐
- twisted reactor 实现源码解析
			
twisted reactor 实现源码解析 1. reactor源码解析 1.1. 案例分析代码: from twisted.internet import protocol fro ...
 - HDU3173 Dominos
			
单向并查集,问至少给几个点可以遍历全图,连通块数量n,入度为0的点的数量m,取max(n,m)~ #include<cstdio> #include<algorithm> #i ...
 - centos 8 cockpit系统监控
			
步骤: 1.激活cockpit服务 2.启动cockpit 3.查看cockpit服务是否启动 4.浏览器访问http://192.168.1.10:9090(用户名root,密码123) 5.查看系 ...
 - ES6-let声明变量
			
在es6中除了var还可以用let申明变量,并且建议使用let而不要再使用var,两者有以下区别: 1.let不能重复声明变量 var name = 'tom'; var name = 'jack'; ...
 - JSP页面输入框赋值换行显示问题
			
<input type="hidden" id="${command.yhzlId}" value="${command.yhzx },${co ...
 - [2/100] MySQL在Windows下安装及一些问题
			
mysql 是RDBMS(关系型数据库) 其他: redis 一般做缓存用 mangoDB 一般做爬虫用 国内镜像下载地址: http://mirrors.sohu.com/mysql/MySQL-8 ...
 - SAM(后缀自动机)总结
			
“写sam是肯定会去写的,这样才学的了字符串,后缀数组又不会用 >ω<, sam套上数据结构的感觉就像回家一样! 里面又能剖分又能线段树合并,调试又好调,我爱死这种写法了 !qwq” SA ...
 - Live2d技术
			
保存一些关于Live2d技术的博文或模型资源,有空研究研究. 什么是 live2d?:https://baike.baidu.com/item/Live2D/8496493 1.https://www ...
 - centos7使用docker制作tomcat本地镜像
			
1.安装Docker 安装docker前请确认当前linux的内核版必须是3.10及以上 命令: uname -r 1).yum install -y yum-utils device-mapper ...
 - 「JLOI2012」树
			
「JLOI2012」树 传送门 不得不说这题的数据是真的水... 我们可以想到很明确的一条思路:枚举每一个点向根节点跳,知道路径和不小于 \(s\),恰好等于 \(s\) 就直接加答案. 跳的过程可以 ...