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$才是真的强,不知道什么时候随随便便就押中了题目. 对于我这种蒟蒻来说,这 ...
随机推荐
- 浅淡!important对CSS的重要性
SS中的!important是一个非常重要的属性,有时候发挥着非常大的作用,52CSS.com这方面的知识并不是非常多,我们看下面的文章,对它作比较感观的了解. 前几天写一些CSS代码的时候又难为我了 ...
- BZOJ-4488:最大公约数(GCD)
给定一个长度为 N 的正整数序列Ai对于其任意一个连续的子序列{Al,Al+1...Ar},我们定义其权值W(L,R )为其长度与序列中所有元素的最大公约数的乘积,即W(L,R) = (R-L+1) ...
- POJ3728 THE MERCHANT LCA RMQ DP
题意简述:给定一个N个节点的树,1<=N<=50000 每个节点都有一个权值,代表商品在这个节点的价格.商人从某个节点a移动到节点b,且只能购买并出售一次商品,问最多可以产生多大的利润. ...
- [Codeforces 787D] Legacy
[题目链接] https://codeforces.com/contest/787/problem/D [算法] 线段树优化建边 , 然后用Dijkstra算法求单源最短路 时间复杂度 : O((N ...
- bzoj4259
fft 搞一个生成函数 对于每位A(j)=Σi=1->m (a[i]-b[i+j])^2*a[i]*b[i+j] 如果A(j)=0说明这位匹配 如果这位是*那么a[i]=0否则等于字母-'a'+ ...
- bzoj4520
KD-tree+堆 多年大坑 KD-tree已经是半年前学的了,忘记了.这道题当时一直T,今天重新抄了一遍,A了 KD-tree过程:1.建树:每次依次按x,y划分平面,像二叉搜索树一样建树,每个点维 ...
- 微软silverlight Analytics FrameWork
本文转自:http://kevinfan.blog.51cto.com/1037293/334622/ http://kevinfan.blog.51cto.com/1037293/334622 ...
- dubbo框架介绍
1.背景 (#) 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进. 单一应用架构 当网站流量很小 ...
- 二Java的常量与变量-1-1标识符
类的名字就是标识符 起类名也是不能带空格的
- [WIP]用已有db进行rails开发
创建: 2019/01/16 晚点补上 https://qiita.com/edo1z/items/a0bf22b294406f00ec7c https://qiita.com/kentosasa/i ...