[JLOI2014]聪明的燕姿(搜索)
城市中人们总是拿着号码牌,不停寻找,不断匹配,可是谁也不知道自己等的那个人是谁。
可是燕姿不一样,燕姿知道自己等的人是谁,因为燕姿数学学得好!燕姿发现了一个神奇的算法:假设自己的号码牌上写着数字 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]聪明的燕姿(搜索)的更多相关文章
- BZOJ_3629_[JLOI2014]聪明的燕姿_dfs
BZOJ_3629_[JLOI2014]聪明的燕姿_dfs Description 阴天傍晚车窗外 未来有一个人在等待 向左向右向前看 爱要拐几个弯才来 我遇见谁会有怎样的对白 我等的人他在多远的未来 ...
- P4397 [JLOI2014]聪明的燕姿
P4397 [JLOI2014]聪明的燕姿 题目背景 阴天傍晚车窗外 未来有一个人在等待 向左向右向前看 爱要拐几个弯才来 我遇见谁会有怎样的对白 我等的人他在多远的未来 我听见风来自地铁和人海 我排 ...
- bzoj3629 / P4397 [JLOI2014]聪明的燕姿
P4397 [JLOI2014]聪明的燕姿 根据唯一分解定理 $n=q_{1}^{p_{1}}*q_{2}^{p_{2}}*q_{3}^{p_{3}}*......*q_{m}^{p_{m}}$ 而$ ...
- 【LG4397】[JLOI2014]聪明的燕姿
[LG4397][JLOI2014]聪明的燕姿 题面 洛谷 题解 考虑到约数和函数\(\sigma = \prod (1+p_i+...+p_i^{r_i})\),直接爆搜把所有数搜出来即可. 爆搜过 ...
- bzoj 3629 [JLOI2014]聪明的燕姿(约数和,搜索)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3629 [题意] 给定S,找出所有约数和为S的数. [思路] 若n=p1^a1*p2^a ...
- 2018.09.11 bzoj3629: [JLOI2014]聪明的燕姿(搜索)
传送门 一道神奇的搜索. 直接枚举每个质因数的次数,然后搜索就行了. 显然质因数k次数不超过logkn" role="presentation" style=" ...
- bzoj3629[JLOI2014]聪明的燕姿
http://www.lydsy.com/JudgeOnline/problem.php?id=3629 搜索. 我们知道: 如果$N=\prod\limits_{i=1}^{m}p_{i}^{k_{ ...
- [BZOJ 3629][ JLOI2014 ]聪明的燕姿
这道题考试选择打表,完美爆零.. 算数基本定理: 任何一个大于1的自然数N,都可以唯一分解成有限个质数的乘积N=P₁^a₁ P₂^a₂…Pn^an,这里P₁<P₂<…<Pn均为质数, ...
- bzoj 3629 [JLOI2014]聪明的燕姿——约数和定理+dfs
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3629 如果要搜索,肯定得质因数分解吧:就应该朝这个方向想. **约数和定理: 对于任意一个大 ...
随机推荐
- 解决Window安全中心对Kitematic-0.17.3-Ubuntu.zip提示病毒,但无法删除的问题。
Trojan:JS/Tisifi.B 类型:特洛伊木马 containerfile: C:\Users\Administrator\Desktop\Kitematic-0.17.3-Ubuntu.zi ...
- chrome extensions notifications
developer.chrome.comhttps://developer.chrome.com/extensions/notifications notification | MDNhttps:// ...
- Swagger UI 用法
Swagger - 简书https://www.jianshu.com/p/4115f2b53983 Swagger简介 - Ghost Stories - CSDN博客https://blog.cs ...
- Pyspider上手
pyspider安装: pip3 install Pyspider 启动服务操作 1.打开cmd:输入 pyspider --help 回车,可以查看帮助信息,pyspider all ...
- vue的三种传参方式
<template> <div> <router-link :to="{'name':'x',params:{'type':'users'}}"> ...
- [转帖]Nginx rewrite模块深入浅出详解
Nginx rewrite模块深入浅出详解 https://www.cnblogs.com/beyang/p/7832460.html rewrite模块(ngx_http_rewrite_modul ...
- 【学亮IT手记】Java 8新特性实例介绍
java8,也称为jdk1.8,于2014.03.18日发布,它支持函数式编程,新的js引擎,新的日期API,新的Stream Api等. 我们主要讨论以下几个新特性: ①Lambda表达式. 允许把 ...
- day 7-14 数据库完整性约束
一. 介绍 约束条件与数据类型的宽度一样,都是可选参数 作用:用于保证数据的完整性和一致性 主要分为: PRIMARY KEY 标示该字段为表的主键,可以唯一的标示记录 FOREIGN KEY 标示该 ...
- 排查 Maxwell can not find database 并且使用 MySQL binlog 解决相关问题
目前我们在使用 Maxwell 在读线上机器的 binlog 同步我们的离线数据库. 这次错误定位上,首先线要确定问题是发生在生产者 还是队列 还是消费者.经过查看各机器上任务的运行日志,定位到了问题 ...
- k8s(一) kubeadm简单集群初始化
写给想入门kubernetes的同学们 # 系统版本 [root@master ~]# cat /etc/os-release NAME="CentOS Linux" VERSIO ...