城市中人们总是拿着号码牌,不停寻找,不断匹配,可是谁也不知道自己等的那个人是谁。

可是燕姿不一样,燕姿知道自己等的人是谁,因为燕姿数学学得好!燕姿发现了一个神奇的算法:假设自己的号码牌上写着数字 S,那么自己等的人手上的号码牌数字的所有正约数之和必定等于 S。

所以燕姿总是拿着号码牌在地铁和人海找数字(喂!这样真的靠谱吗)可是她忙着唱《绿光》,想拜托你写一个程序能够快速地找到所有自己等的人。

Solution

分析约数和的式子(1+p1+p1^2+...+p1^a1)*(1+p2+p2^2+...+p2^a2)*...*(1+pk+pk^2+...+pk^ak)。

本题需要输出所有答案,可以猜测答案不是很多。

我们可以枚举所有的p和他们的指数进行搜索。

我们先定p的范围是根号1e5.

但这样会漏掉很多答案。

观察到大与根号的指数次数最多是一。

所以每次搜的时候判一下有没有大质数。

Code

#include<iostream>
#include<cstdio>
#include<algorithm>
#define N 100002
#define NN 100000
using namespace std;
typedef long long ll;
int prime[N],vis[N],s,ans,k,st[N],tot;
bool pd(int x){
if(x==) return false;
if(x<=NN) return !vis[x];
for(int i=;i<=tot&&(ll)prime[i]*prime[i]<=x;i++)if(x%prime[i]==) return false;
return true;
}
void dfs(int la,int num,int num1){
if(num==){st[++ans]=num1;return;}
if(num->prime[la]&&pd(num-))st[++ans]=(num-)*num1;
for(int i=la+;i<=tot&&prime[i]*prime[i]<=num;++i)
for(ll j=prime[i],t=prime[i]+;t<=num;j*=prime[i],t+=j){
if(num%t==)dfs(i,num/t,num1*j);
}
}
int main(){
for(int i=;i<=NN;++i){
if(!vis[i])prime[++tot]=i;
for(int j=;j<=tot&&(k=i*prime[j])<=NN;++j){
vis[k]=;
if(i%prime[j]==)break;
}
}
while(scanf("%d",&s)!=EOF){
ans=;
dfs(,s,);
printf("%d\n",ans);
sort(st+,st+ans+);
if(ans){
for(int i=;i<=ans;++i)printf("%d ",st[i]);printf("\n");
}
}
return ;
}
#include<iostream>
#include<cstdio>
#include<algorithm>
#define N 100002
#define NN 100000
using namespace std;
typedef long long ll;
int prime[N],vis[N],s,ans,k,st[N],tot;
bool pd(int x){
if(x==) return false;
if(x<=NN) return !vis[x];
for(int i=;i<=tot&&(ll)prime[i]*prime[i]<=x;i++)if(x%prime[i]==) return false;
return true;
}
void dfs(int la,int num,int num1){
if(num==){st[++ans]=num1;return;}
if(num->prime[la]&&pd(num-))st[++ans]=(num-)*num1;
for(int i=la+;i<=tot&&prime[i]*prime[i]<=num;++i)
for(ll j=prime[i],t=prime[i]+;t<=num;j*=prime[i],t+=j){
if(num%t==)dfs(i,num/t,num1*j);
}
}
int main(){
for(int i=;i<=NN;++i){
if(!vis[i])prime[++tot]=i;
for(int j=;j<=tot&&(k=i*prime[j])<=NN;++j){
vis[k]=;
if(i%prime[j]==)break;
}
}
while(scanf("%d",&s)!=EOF){
ans=;
dfs(,s,);
printf("%d\n",ans);
sort(st+,st+ans+);
if(ans){
for(int i=;i<=ans;++i)printf("%d ",st[i]);printf("\n");
}
}
return ;
}

[JLOI2014]聪明的燕姿(搜索)的更多相关文章

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

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

  2. P4397 [JLOI2014]聪明的燕姿

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

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

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

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

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

  5. bzoj 3629 [JLOI2014]聪明的燕姿(约数和,搜索)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3629 [题意] 给定S,找出所有约数和为S的数. [思路] 若n=p1^a1*p2^a ...

  6. 2018.09.11 bzoj3629: [JLOI2014]聪明的燕姿(搜索)

    传送门 一道神奇的搜索. 直接枚举每个质因数的次数,然后搜索就行了. 显然质因数k次数不超过logkn" role="presentation" style=" ...

  7. bzoj3629[JLOI2014]聪明的燕姿

    http://www.lydsy.com/JudgeOnline/problem.php?id=3629 搜索. 我们知道: 如果$N=\prod\limits_{i=1}^{m}p_{i}^{k_{ ...

  8. [BZOJ 3629][ JLOI2014 ]聪明的燕姿

    这道题考试选择打表,完美爆零.. 算数基本定理: 任何一个大于1的自然数N,都可以唯一分解成有限个质数的乘积N=P₁^a₁ P₂^a₂…Pn^an,这里P₁<P₂<…<Pn均为质数, ...

  9. bzoj 3629 [JLOI2014]聪明的燕姿——约数和定理+dfs

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3629 如果要搜索,肯定得质因数分解吧:就应该朝这个方向想. **约数和定理: 对于任意一个大 ...

随机推荐

  1. Windows10下安装VMware虚拟机并搭建CentOS系统环境

    转载: http://blog.51cto.com/10085711/2069270 操作系统 Windows 10专业版(64位) VMware虚拟机 产品:VMware® Workstation ...

  2. 网络编程--使用UDP发送接收数据

    package com.zhangxueliang.udp; import java.io.IOException; import java.net.DatagramPacket; import ja ...

  3. Day5-1 面向对象和面向过程

    摘要: 类的定义 类的增删改查 对象的增删改查 对象的查找和绑定 面向对象和面向过程的区别: 1.面向过程就像是工厂的流水线,按部就班的有序的工作. 优点:把复杂的问题简单化 缺点:可扩展性差.一个步 ...

  4. 爬取B站视频

    先安装you_get pip install you_get 爬取代码,爬了个ASMR的,学习困了自我催眠 import sys from you_get import common as you_g ...

  5. iview render bug & vue namespace bug

    iview render bug https://codepen.io/xgqfrms/pen/gyGjKP https://codepen.io/xgqfrms/full/gyGjKP bug &l ...

  6. PHP的特质Trait使用

    参考: Trait的使用,网站地址https://www.jianshu.com/p/fc053b2d7fd1

  7. JAVA不可变类(immutable)机制与String的不可变性--非常好.

    JAVA不可变类(immutable)机制与String的不可变性 https://www.cnblogs.com/jaylon/p/5721571.html

  8. Servlet3.0上传

    1.上传对表单限制 *method=post *Enctype=multipart/form-data,它的默认值是:application/x-www-form-urlencoded 表单中需要添加 ...

  9. Spring 使用介绍(十一)—— Spring事件

    一.简介 spring事件是观察者设计模式的实现,主要有三个元素: 事件 spring事件由ApplicationEvent定义 监听者 由ApplicationListener定义 发布者 由App ...

  10. MD5进行加密操作

    package com.dyy.test; import java.security.MessageDigest; import java.security.NoSuchAlgorithmExcept ...