[NOI 2008]假面舞会

题目

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

  城市中人们总是拿着号码牌,不停寻找,不断匹配,可是谁也不知道自己等的那个人是谁。可是燕姿不一样,燕姿知道自己等的人是谁,因为燕姿数学学得好!燕姿发现了一个神奇的算法:假设自己的号码牌上写着数字S,那么自己等的人手上的号码牌数字的所有正约数之和必定等于S
  所以燕姿总是拿着号码牌在地铁和人海找数字(喂!这样真的靠谱吗)可是她忙着唱《绿光》,想拜托你写一个程序能够快速地找到所有自己等的人。
  (莫名唱了起来= =)

INPUT

  输入包含k组数据(k<=100)对于每组数据,输入包含一个号码牌S(S<=10^9)

OUTPUT

  对于每组数据,输出有两行,第一行包含一个整数m,表示有m个等的人,第二行包含相应的m个数,表示所有等的人的号码牌。
  注意:你输出的号码牌必须按照升序排列。

SAMPLE

INPUT

42

OUTPUT

3
20 26 41

解题报告

考试的时候,一看就知道A不了,打了个极其暴力的程序= =

 inline void find(long long x){
int ret();
for(int i=;i*i<=x;i++){
if(x%i==)
ret+=i,ret+=x%i;
if(i*i==x)
ret-=i;
}
if(ret==s)
ans++;
}

结果显然= =
正解则是个很神奇的东西
唯一分解定理:任何大于1的自然数,都可以唯一分解成有限个质数的乘积
即:n=p1^k1×p2^k2...×pa^ka
那么何不预处理出来一大圈质数,然后dfs出唯一分解式呢
n=p1^k1×p2^k2..×pa^ka
因数和即可表示成(p1+p1^2+...+p1^k1)...
那么我们就可以dfs了
(我实在不会数学啊QAQ)

 #include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
typedef long long L;
L s;
L prime[],num_prime();
bool flag[];
inline void play_table(){
memset(flag,true,sizeof(flag));
flag[]=flag[]=false;
for(int i=;i<;i++){
if(flag[i])
prime[++num_prime]=i;
for(int j=;j<=num_prime&&prime[j]*i<;j++){
flag[i*prime[j]]=false;
if(i%prime[j]==)
break;
}
}
}
L ans[],top();
int ppp[]={,,,};
/*inline int modular_exp(int a,int m,int n){
if(m==0)
return 1;
if(m==1)
return a%n;
L w(modular_exp(a,m>>1,n));
w=w*w%n;
if(w&1)
w=w*a%n;
return w;
}
inline bool check(L x){
if(x==2||x==3||x==5||x==7)
return true;
for(int i=0;i<4;i++)
if(modular_exp(ppp[i],x,x)!=ppp[i])
return false;
return true;
}*/
inline bool check(L x){
for(int i=;prime[i]*prime[i]<=x;i++)
if(x%prime[i]==)
return false;
return true;
}
inline void dfs(L st,L pos,L now){
if(st==){
ans[++top]=now;
return;
}
if((st-)>prime[pos]&&check(st-))
ans[++top]=now*(st-);
for(int i=pos+;prime[i]*prime[i]<=st;i++){
L t(),al();
for(int j=;t<=st;j++){
al*=prime[i];
t+=al;
if(st%t==)
dfs(st/t,i,now*al);
}
}
}
int main(){
play_table();
while(scanf("%lld",&s)==){
top=;
dfs(s,,);
sort(ans+,ans+top+);
printf("%lld\n",top);
for(int i=;i<top;i++)
printf("%lld ",ans[i]);
if(top!=)
printf("%lld\n",ans[top]);
}
}

ps:本来想打Miller-Rabin的,然后就gg了QAQ

[补档][JLOI 2017]聪明的燕姿的更多相关文章

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

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

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

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

  3. P4397 [JLOI2014]聪明的燕姿

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

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

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

  5. AcWing1296. 聪明的燕姿

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

  6. 聪明的燕姿[JLOI2014]

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

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

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

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

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

  9. bzoj3629[JLOI2014]聪明的燕姿

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

随机推荐

  1. 石头剪刀布 R语言统计分析

    关于石头剪刀布,做出了详细的分析,具体ppt见地址 http://files.cnblogs.com/files/GMGHZ971322/R%E8%AF%AD%E8%A8%80.pptx 16级电商三 ...

  2. 手把手教你从基础学习JQuery

    JQuery JQuery 语法 1.jQuery("选择器").action();通过选择器调用事件函数 但jQuery中,jQuery可以用$代替,即$("选择器&q ...

  3. 数据库外连接及MySQL实现

    MySQL查询分为内连接查询和外连接查询,他们的区别在于:内连接查询的两个表示对等关系,根据条件进行匹配:外连接是以某一个表为主,两一个表根据条件进行关联.外连接分为左外连接.右外连接和全外连接.本文 ...

  4. Android recyclerView的空数据显示

    直接分享链接:http://blog.csdn.net/whitley_gong/article/details/51244723

  5. Python3分析sitemap.xml抓取导出全站链接

    最近网站从HTTPS转为HTTP,更换了网址,旧网址做了301重定向,折腾有点大,于是在百度站长平台提交网址,不管是主动推送还是手动提交,前提都是要整理网站的链接,手动添加太麻烦,效率低,于是就想写个 ...

  6. VUE2.0+VUE-Router做一个图片上传预览的组件

    之前发了一篇关于自己看待前端组件化的文章,但是由于学习和实践的业务逻辑差异,所以自己练习的一些demo逻辑比较简单,打算用vue重构现在公司做的项目,所以在一些小的功能页面上使用vue来做的,现在写的 ...

  7. 无法将类型为excel.applicationclass的com 强制转换为接口类型的解决方法[转]

    c#解决方案EXCEL 导出 今天碰到客户的电脑在导出EXCEL的时候提示,无法将类型为 excel.applicationclass 的 com 强制转换为接口类型 excel._applicati ...

  8. Oracle数据库中的重要对象

    数据库中的重要对象:表.视图.序列.函数.存储过程.索引.同义词1.表:用PL/SQL Developer 软件打开 Scott的DEPT表查看SQL,可以看见DEPT表创建的脚本-- Create ...

  9. linux安装oracle笔记

    linux安装oracle .增大swap空间,内存大于8G后swap跟内存同等大小即可 mkdir /home/swap cd /home/swap mkswap swapfile swapon s ...

  10. web.xml is missing and <failOnMissingWebXml> is se

    摘要 maven模块化 在学习maven模块化构建项目的时候遇到了如下报错信息: web.xml is missing and <failOnMissingWebXml> is set t ...