呃呃

看到了这道题 没有任何思路…… 百度了一发题解 说要用约数和定理

就查了一发

http://baike.so.com/doc/7207502-7432191.html

(不会的可以先学习一下)

然后呢 我们考虑枚举约数

先线性筛一遍10^5以下的 10^5以上的数可以用已经筛过的素因数枚举

最后就搜一下就好了 (记得判断=1的情况)

还有 此题PE很坑爹

不能有行末空格 0的情况不用输出空行

//By SiriusRen
#include <cmath>
#include <cstdio>
#include <algorithm>
using namespace std;
#define N 100000
int s,cnt,pri[N],Ans[N];
bool p[N+5];
void get_prime(){
for(int i=2;i<=N;i++){
if(!p[i])pri[++cnt]=i;
for(int j=1;j<=cnt&&i*pri[j]<=N;j++){
p[i*pri[j]]=1;
if(i%pri[j]==0)break;
}
}
}
bool is_prime(int x){
if(x<=N)return !p[x];
int temp=sqrt(x);
for(int i=1;pri[i]<=temp;i++)
if(x%pri[i]==0)return 0;
return 1;
}
void dfs(int last,int ans,int sum){
if(sum==1){Ans[++cnt]=ans;return;}
if(sum-1>pri[last]&&is_prime(sum-1))Ans[++cnt]=ans*(sum-1);
for(int i=last+1;pri[i]*pri[i]<=sum;i++)
for(int psum=pri[i]+1,div=pri[i];psum<=sum;div*=pri[i],psum+=div)
if(sum%psum==0)dfs(i,ans*div,sum/psum);
}
int main(){
get_prime();
while(~scanf("%d",&s)){
cnt=0,dfs(0,1,s);
sort(Ans+1,Ans+1+cnt);
printf("%d\n",cnt);
for(int i=1;i<=cnt;i++){
printf("%d",Ans[i]);
if(i!=cnt)putchar(' ');
}
if(cnt)puts("");
}
}

BZOJ 3629 约数和定理+搜索的更多相关文章

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

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

  2. 【搜索】【约数个数定理】[HAOI2007]反素数ant

    对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4.如果某个正整数x满足:g(x)>g(i) 0<i<x,则称x为反质数. 所以,n以内的反质数即为不超过n的 ...

  3. bzoj3629 [JLOI2014]聪明的燕姿——DFS+约数和定理

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3629 扫除了一个知识盲点:约数和定理 约数和定理: 对于一个大于1正整数n可以分解质因数:n ...

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

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

  5. hdu1492(约数个数定理)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1492 这里先讲一下约数个数定理: 对于正整数x,将其质因分解为 x = pow(p1, a) * po ...

  6. poj 1845 Sumdiv 约数和定理

    Sumdiv 题目连接: http://poj.org/problem?id=1845 Description Consider two natural numbers A and B. Let S ...

  7. 【线性筛】【筛法求素数】【约数个数定理】URAL - 2070 - Interesting Numbers

    素数必然符合题意. 对于合数,如若它是某个素数x的k次方(k为某个素数y减去1),一定不符合题意.只需找出这些数. 由约数个数定理,其他合数一定符合题意. 就从小到大枚举素数,然后把它的素数-1次方都 ...

  8. 【POJ1845】Sumdiv(数论/约数和定理/等比数列二分求和)

    题目: POJ1845 分析: 首先用线性筛把\(A\)分解质因数,得到: \[A=p_1^{a_1}*p_2^{a_2}...*p_n^{a_n} (p_i是质数且a_i>0) \] 则显然\ ...

  9. 【FZYZOJ】数论课堂 题解(约数个数定理)

    前言:想了两个小时orz,最后才想到要用约数个数定理…… ------------- 题目大意: 给定$n,q,A[1],A[2],A[3]$ 现有$A[i]=(A[i-1]+A[i-2]+A[i-3 ...

随机推荐

  1. 队列(Queue)-c实现

    相对而言,队列是比较简单的. 代码还有些warning,我改不动,要找gz帮忙. #include <stdio.h> typedef struct node { int data; st ...

  2. 洛谷 P1541 乌龟棋 (四维费用背包)

    一开始直接用01背包 后来发现这个物品和位置有关. 也就是价值不是固定的 后来看了题解 看了卡片最多就4 所以这是一个四维费用的背包, 每一维是卡片的数量 价值就是当前的位置的价值. 但是与常规的背包 ...

  3. Linux学习总结(11)——Linux文件查找

    Linux下的常用查找命令 locate whereis which find locate  -i, 忽略大小写  find  根据文件名或正则表达式搜索  -name    条件限制  -a 与条 ...

  4. Mysql学习总结(21)——MySQL数据库常见面试题

    1. 如何使用SELECT语句找到你正在运行的服务器的版本并打印出当前数据库的名称? 答:下面的语句的结果会显示服务器的版本和当前的数据库名称 mysql> SELECT VERSION(), ...

  5. [Transducer] Create a Sequence Helper to Transduce Without Changing Collection Types

    A frequent use case when transducing is to apply a transformation to items without changing the type ...

  6. [LeetCode]Median of Two Sorted Arrays 二分查找两个有序数组的第k数(中位数)

    二分.情况讨论 因为数组有序,所以能够考虑用二分.通过二分剔除掉肯定不是第k位数的区间.如果数组A和B当前处理的下标各自是mid1和mid2.则 1.假设A[mid1]<B[mid2], ①.若 ...

  7. 移植u-boot-2014.4到S5PV210/TQ210(完整)

    本文很多其它的是教会大家怎样学习 1.1   概述 1.2   u-boot配置过程分析 1.3   u-boot编译过程分析 1.4   SPL 1.5   加入自己的单板 1.6   移植u-bo ...

  8. Linux下查询CPU 缓存的工具

    在Linux下能够使用例如以下工具查询CPU缓存: 方式1: $ lscpu L1d cache: 32K <span style="white-space:pre"> ...

  9. Unity游戏开发--30s制作精美地图

    "君子生非异也.善假于物也"--<劝学>荀子 引用这句话的目的,是我觉得有时候.利用工具来提高游戏开发效率是很必要的. 利用工具,解放程序员双手. 今天想给大家介绍下. ...

  10. Import Example Dataset

    Overview The examples in this guide use the restaurants collection in the test database. The followi ...