枚举法、穷举法

来源:互联网 发布:php支付宝接口开发文档 编辑:程序博客网 时间:2024/06/10 15:18

首先是一道暴力枚举的例题,然后陈述枚举法的定义和暴力指的是什么意思;


题目描述

有一天,mirror给了kyoma一个数x,让kyoma找到一个正整数y>=2,使得y-x的绝对值最小。
但是kyoma觉得这样做太简单了,于是她反问mirror,要求在满足上一个条件的同时,这个y中的每个质因数均恰好出现2次。
mirror感到很困难,你能够帮帮她吗?

输入

第一行输入一个整数T(1<=T<=50)
每组数据有一行,一个整数x(1<=x<=10^18)

输出

对于每组数据,输出一行y-x的最小绝对值

样例输入

511124290871699579095

样例输出

23656724470


一、题目信息:
1.绝对值——>y可能比x小,可能比x大,但是满足条件的y一定是在x周围的——>while(x--)  while(x++)
2.质因数(把喵喵坑的好苦啊)——>给定一个数n,n的因数是质数,则称该数为质因数
3.y中的每个质因数均恰好出现两次——>y一定是一个平方数——>y一定是一个合数——>合数可以表示成若干个质数相乘的形式
          ↓
     从2开始验证,在sqrt(y)中只能出现一次,出现两次以上,该数一定不符合条件,且通过验证的数一定是质数

二、代码实现:

typedef long long ll;
while(t--)    (我学了一些小改变)




(声明:完全是个人理解,不是课本上的官方定义,有理解不对的地方,求求你告诉我)

暴力法:从题意出发,不运用什么技巧,按照题目的条件或者是数学公式,顺序解题。
(在暴力的过程中可能会发现简单解题的方法,例如:含有多个变量的等式,可能可以减少变量,从而可能减少循环)

枚举法与穷举法:根据题目给出的限制条件,挨个数据进行检验,最终找出符合条件的答案。(在范围内,挨个判断挨个找)
枚举法的缺点:数据量大的话会导致时间崩溃
枚举的一般结构:while循环
枚举解题的基本思路:
1.确定枚举对象,枚举范围和判断条件
2.枚举可能的解,验证

经典问题:百钱买百鸡
有一个人有一百块钱,打算买一百只鸡。到市场一看,大鸡三块钱一只,小鸡一块钱三只,不大不小的鸡两块钱一只。现在,请你编一程序,帮他计划一下,怎么样买法,才能刚好用一百块钱买一百只鸡?



0 1
原创粉丝点击