题面

传送门

分析

看到约数之和,我们首先想到约数和公式

若$ x=\prod_{i=1}{n}p_i{k_i} \(,则x的约数和为\) \prod_{i=1}^{n} \sum_{j=0}^{k_i} p_i^j$

那么我们可以DFS枚举x的质因数分解式,然后判断求出的约数和是否等于s

具体来说,我们先枚举选的质数\(p_i\),对于每个\(p_i\)枚举他们的指数\(k_i\)(指数为0相当于不选),然后计算和\(tmp=1+p_i+p_i^2+\dots+p_i^{k_i}\)

然后将tmp乘入当前约数和

dfs(deep,left,ans)表示当前枚举到第deep个质数,left表示s/当前和,ans表示当前的x

注意剪枝:

1.枚举质数时注意只需枚举1~sqrt(s)之间的质数,然后如果left正好等于一个大质数+1,则直接更新答案

质数的判断用\(O(\sqrt n)\)的试除法即可

2.枚举和时,当且仅当left能整除当前和的时候才继续更新

3.不要用sqrt函数,会很慢

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define maxn 100000
using namespace std;
long long s;
int cnt=0;
int vis[maxn+5];
int prime[maxn+5];
void sieve(int n){
for(int i=2;i<=n;i++){
if(!vis[i]) prime[++cnt]=i;
for(int j=1;j<=cnt&&i*prime[j]<=n;j++){
vis[i*prime[j]]=1;
if(i%prime[j]==0) break;
}
}
} bool is_prime(int x){
if(x==1) return 0;
if(x<=maxn) return !vis[x];
else{
for(int i=1;i<=cnt&&(long long)prime[i]*prime[i]<=x;i++){
if(x%prime[i]==0) return 0;
}
return 1;
}
} int sqs;
int sz=0;
long long res[maxn];
void dfs(int deep,long long left,long long ans){
if(left==1){
res[++sz]=ans;
return;
} if(left-1>prime[deep]&&is_prime(left-1)) res[++sz]=ans*(left-1);
for(int i=deep+1;prime[i]*prime[i]<=left;i++){
long long tmp=1;
long long pow=1;
for(int j=1;tmp+pow<=left;j++){
pow*=prime[i];
tmp+=pow;
if(left%tmp==0) dfs(i,left/tmp,ans*pow); }
}
}
int main(){
sieve(maxn);
while(scanf("%lld",&s)!=EOF){
sz=0;
dfs(0,s,1);
printf("%d\n",sz);
sort(res+1,res+1+sz);
for(int i=1;i<=sz;i++){
printf("%d ",res[i]);
}
printf("\n");
}
}

LOJ 2234/BZOJ 3629 聪明的燕姿(数论+DFS)的更多相关文章

  1. bzoj 3629 聪明的燕姿 约数和+dfs

    考试只筛到了30分,正解dfs...... 对于任意N=P1^a1*P2^a2*......*Pn^an, F(N)=(P1^0+P1^1+...+P1^a1)(P2^0+P2^1+...+P2^a2 ...

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

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

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

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

  4. P4397 [JLOI2014]聪明的燕姿

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

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

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

  6. AcWing1296. 聪明的燕姿

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

  7. [补档][JLOI 2017]聪明的燕姿

    [NOI 2008]假面舞会 题目 阴天傍晚车窗外 未来有一个人在等待 向左向右向前看 爱要拐几个弯才来 我遇见谁会有怎样的对白 我等的人他在多远的未来 我听见风来自地铁和人海 我排着队拿着爱的号码牌 ...

  8. 聪明的燕姿[JLOI2014]

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

  9. [JLOI2014]聪明的燕姿(搜索)

    城市中人们总是拿着号码牌,不停寻找,不断匹配,可是谁也不知道自己等的那个人是谁. 可是燕姿不一样,燕姿知道自己等的人是谁,因为燕姿数学学得好!燕姿发现了一个神奇的算法:假设自己的号码牌上写着数字 S, ...

随机推荐

  1. Solr的学习使用之(五)添加索引数据

    1.创建SolrServer类 SolrServer类:提供与Solr实例的连接与通信. 往Solr里添加索引数据,据说有好几种办法,这边利用SolrJ操作solr API完成index操作,具体So ...

  2. Mongodb副本集实现及读写分离

    前言 地址:https://blog.csdn.net/majinggogogo/article/details/51586409 作者介绍了,mongodb副本集的读写原理,原理是通过代码层来实现. ...

  3. uboot学习之五-----uboot如何启动Linux内核

    uboot和内核到底是什么?uboot实质就是一个复杂的裸机程序:uboot可以被配置也可以做移植: 操作系统内核本身就是一个裸机程序,和我们学的uboot和其他裸机程序没有本质的区别:区别就是我们操 ...

  4. $[WC2018]$通道(虚树,边分练习)

    \([WC2018]\)通道(虚树,边分练习) 感受码题的快感 这段时间真的是忙忙忙忙忙,省选之前还是露个脸,免得以后没机会了. 但是我感觉我的博客真的没啥人看,虽然我挺想要有人看的,但是自己真的没啥 ...

  5. Mybatis之:SqlSessionFactory、SqlSession

    public class CountryMapperTest { private static SqlSessionFactory sqlSessionFactory; @BeforeClass pu ...

  6. 如何在centos7中设置redis服务器开机自启动

    1.简单说明centos7系统中有不同类型的程序,一类是操作系统的服务程序,另一类是第三方程序,而redis就是第三方程序,每次关机后开机都要手工重新启动,很麻烦,那么如何把redis设置为开机自启动 ...

  7. Flask之路由相关

    1.装饰器中的参数 @app.route("/info", methods=["GET", "POST"]) def student_inf ...

  8. Julia 语言

    同时安装多个库 Pkg.add.(["IJulia", "Combinatorics", "Plots", "TaylorSeri ...

  9. RMQ Direct

    原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11792398.html RMQ Direct Project Directory Maven Depe ...

  10. 小记:web安全测试之——固定session漏洞

    今天因为项目背景需要,需要检测web接口是否一些安全隐患. 无奈于从未掌握有系统的渗透性知识,只好根据个人对网络协议和 web 的理解,做一些探索,最终发现了一个session fixation at ...