BZOJ1053(数学结论进行剪枝搜索)
一个数N(1<=N<=2,000,000,000)。
Output
不超过N的最大的反质数。
1000
Sample Output
840
这道题博主们都直觉证明法搞得我这种蒟蒻怀疑自己的正确性了好吧……我们一起来证一证。
一是尽可能取约数数目大的,然后如果数量相同只能取最小的那个才算保证了反质数,这个地方不多说;
二是不同的质因子(2,3,5,……)不会超过10个,因为2*3*5*……*29*31爆int了,而29是第10个。
三是反质数的因子一定是2、3、5、……、23、29里面选的,不会存在31以后的。原因:选了31及以上的,就注定有0~29的要选不上(根据第二条)。那么举例来说,如果是选了31而没选2,那这个数除掉31再乘上2^4显然可以得到更多约数吧;如果是选了31而没选29,那这个数除掉31再乘29,约数个数没变,数却变小了,显然刚才那个31的不是反质数(根据定义)。为什么29、23这种的就没问题而31就不可以呢?因为选29和选2不冲突啊~
四是把数唯一分解成2^c1 * 3^c2 * 5^c3 * …… * 29^c10的话,c1 >= c2 >= c3 >=……>=c10。原因:我们知道约数总个数用乘法原理组合计算一下为(c1+1)*(c2+1)*……(c10+1),这个+1证明时用不上啦,那就di = ci + 1吧,即d3 = c3+1。约数数量就是d1*d2*d3*……*d10了。不失一般性地我们在这里举例描述吧,假设d3 > d1,那么如果存在一个正整数x <= d3,使得(d1+x)*(d3-x)>=d1*d3,则当前这个数不是反质数。上式的意义是:如果先除掉5的x次幂再乘上2的x次幂以后约数变大了或者约数相等(但是数却变小了对吧),则违反反质数定义。然后不等式解一下得x <= c3-c1。结论已经很明显了不再解释。
搜索部分不说了,主要是弥补一下其他博客证明的部分。
#include <cstdio>
#define ll long long
#define R(x) scanf("%d", &x)
#define W(x) printf("%d\n", x)
#define rep(i, a, b) for (int i = a; i <= b; i++) int n, ans, CNT;
int primes[] = {, , , , , , , , , }; void dfs(int i, int num, int cnt, int last) {
if (i == ) {
if (cnt > CNT || (cnt == CNT && ans > num))
ans = num, CNT = cnt;
return;
} ll t = ;
rep(j, , last) {
if (num * t > n) break; dfs(i + , num * t, cnt * (j+), j);
t *= primes[i];
}
} int main() {
R(n);
dfs(, , , );
W(ans);
}
BZOJ1053(数学结论进行剪枝搜索)的更多相关文章
- alpha-beta剪枝搜索
•一种基于剪枝( α-βcut-off)的深度优先搜索(depth-first search). •将走棋方定为MAX方,因为它选择着法时总是对其子节点的评估值取极大值,即选择对自己最为有利的着法: ...
- poj 1416 (hdu 1539)Shredding Company:剪枝搜索
点击打开链接 题目大意是有一个分割机,可以把一串数字分割成若干个数字之后求和,题目输入一个数字上界和待分割的数字,让我们求出分割后数字之和在不超过给定max的情况下的最大值,并且给出分割方案,如果没有 ...
- HDU 2437 Jerboas (剪枝搜索)
题意:给定一幅图,图上有两种点T,P.......一只跳鼠在一个T点作为起始点,它想通过图上的路到达某个P点,P点满足如下要求: (1).到达P点的途中路径权值为k的倍数 (2).尽量让路径权值取最小 ...
- HDU 4620 Fruit Ninja Extreme(2013多校第二场 剪枝搜索)
这题官方结题报告一直在强调不难,只要注意剪枝就行. 这题剪枝就是生命....没有最优化剪枝就跪了:如果当前连续切割数加上剩余的所有切割数没有现存的最优解多的话,不需要继续搜索了 #include &l ...
- UVa 11762 Race to 1 (数学期望 + 记忆化搜索)
题意:给定一个整数 n ,然后你要把它变成 1,变换操作就是随机从小于等于 n 的素数中选一个p,如果这个数是 n 的约数,那么就可以变成 n/p,否则还是本身,问你把它变成 1 的数学期望是多少. ...
- 数学结论【p1463】[POI2002][HAOI2007]反素数
Description 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4. 如果某个正整数x满足:g(x)>g(i) 0<i<x,则称x为反质数.例如,整数 ...
- uva 11762 数学期望+记忆化搜索
题目大意:给一个正整数N,每次可以在不超过N的素数中随机选择一个P,如果P是N的约数,则把N变成N/p,否则N不变,问平均情况下需要多少次随机选择,才能把N变成1? 分析:根据数学期望的线性和全期望公 ...
- POJ 3134 Power Calculus (迭代剪枝搜索)
题目大意:略 题目里所有的运算都是幂运算,所以转化成指数的加减 由于搜索层数不会超过$2*log$层,所以用一个栈存储哪些数已经被组合出来了,不必暴力枚举哪些数已经被搜出来了 然后跑$iddfs$就行 ...
- USACO4.1 Beef McNuggets【数学/结论】
吐槽/心路历程 打开这道题的时候:*&@#%*#?!这不是小凯的疑惑吗?好像还是个加强版的?我疑惑了.原来$USACO$才是真的强,不知道什么时候随随便便就押中了题目. 对于我这种蒟蒻来说,这 ...
随机推荐
- RobotFramework教程使用笔记——Selenium2Library库
selenium之前已经学习介绍过了,它是一个支持多语言.多平台.多浏览器的web自动化测试框架,在robotframework中也可以导入selenium库来进行web自动化测试.它使用seleni ...
- codeforces 466C. Number of Ways 解题报告
题目链接:http://codeforces.com/problemset/problem/466/C 题目意思:给出一个 n 个数的序列你,问通过将序列分成三段,使得每段的和都相等的分法有多少种. ...
- jquery回顾part1——选择器
jQuery 选择器 选择器 实例 选取 * $("*") 所有元素 #id $("#lastname") id="lastname" 的元 ...
- 使用Dubbo实现RPC调用
启动Dubbo服务有2个方式,1是通过xml配置,2是通过注解来实现,这点和Spring相似. 采用XML配置如下: <?xml version="1.0" encoding ...
- 【python】string functions
1.str.replace(word0,word1) ##用word1替换str中所有的word0 >>> 'tea for too'.replace('too', 'two') ...
- ROM的分类
转载自:http://www.ic37.com/htm_tech/2012-5/82774_23811.htm ROM(只读存储器)按其内容写入方式,一般分为3种:固定内容ROM:可一次编程PROM: ...
- BZOJ_2901_矩阵求和_前缀和
BZOJ_2901_矩阵求和_前缀和 Description 给出两个n*n的矩阵,m次询问它们的积中给定子矩阵的数值和. Input 第一行两个正整数n,m. 接下来n行,每行n个非负整数,表示第一 ...
- 各个国家 不同字符集的unicode 编码范围
原文地址:http://blog.csdn.NET/xzl04/article/details/6307416 0000-007F:C0控制符及基本拉丁文 (C0 Control and Basic ...
- bzoj2962
线段树+卷积 这个东西直接算不太好,但是合并两段结果却很方便,假设c[i]表示选i个数乘积的和,那么$a[i]=\sum_{j=0}^{i}{b[j]*c[i-j]}$ 线段树维护即可 #includ ...
- Oauth2的遇坑一点提示(Spring Security Oauth2 / Cloud)
1)使用@EnableOAuth2Sso的网页客户端,登录是成功的可是总是像没成功一样. 提示错误:没有 症结:context-path没设置,或者设置为/(ROOT) 参考资料:https://sp ...