用二分查找来找到一个X使得满足X!%M==0
M=a1^b1*a2^b2*a3^b3…*an^bn
X!=1*2*3*4*5....*X;
M可以化为其个个质因子的k次方的乘积
例如 2^3*3^2*4^5==2^13*3^2;
X!则可以得到
例如 2的次方为
X! = 2^(X/2)*(1*2*3*4*5*6*7....*X/2)*other=(x/2)! *othe...
分类:
其他好文 时间:
2014-07-29 15:05:18
阅读次数:
171
原题http://poj.org/problem?id=2456
Aggressive cows
Time Limit: 1000MS
Memory Limit: 65536K
Total Submissions: 6001
Accepted: 2989
Description
Farmer John has built a new...
分类:
其他好文 时间:
2014-07-29 15:04:48
阅读次数:
199
折半查找,也叫二分查找,当在一个数组或集合中查找某个元素时,先定位出中间位置元素,如果要查找的元素正好和该中间位置元素相等,通过一次查找,就能找到匹配元素;如果要查找的元素小于该中间位置元素,就抛弃后面一半的元素,在前面一半的元素中再定位出中间位置元素,如此反复,直到找到匹配元素;如果要查找的元素大...
分类:
其他好文 时间:
2014-07-29 10:22:58
阅读次数:
313
之间介绍插入排序时漏掉一种插入方式,那就是折半插入。
这种方式是采用二分查找法去查找插入点,可以减少元素比较次数,但是并不能减少移动次数,复杂度跟直接插入一样,都为O(n^2).
直接上代码:
//二分插入排序
void binary_insert_sort(int arr[],int len)
{
if(arr == NULL || len <= 1)
{
return;
}...
分类:
其他好文 时间:
2014-07-28 00:27:19
阅读次数:
292
二分查找算法是一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组 为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。折半搜索每次把搜索区域减少一半,时间复杂度为Ο(logn)。...
分类:
其他好文 时间:
2014-07-27 23:52:09
阅读次数:
270
素数打表,加上sum[i]数组表示1-i中有多少个素数二分查找#include #include using namespace std;#define max 1000005int phi[max],sum[max];int a,b,k;void getp(){ for(int i=2;i>a>>...
分类:
其他好文 时间:
2014-07-27 23:27:19
阅读次数:
355
关于二分查找,这绝对是最简单却又最难的实现了,其各种版本号能够參见http://blog.csdn.net/xuqingict/article/details/17335833在C++的标准库中,便提供了这种函数,lower_bound 与 upper_bound,对于这两个函数的理解,有例如以下几...
分类:
编程语言 时间:
2014-07-27 21:30:35
阅读次数:
306
蛮常见一道题目。
思路:
1:排序,按顺序遍历两个数之和twoSum,
2: 二分查找 (0 - twoSum)看是否存在
这题最容易错的地方是must not contain duplicate triplets,所以遍历的这时候要用一个数字记录最后一个遍历的数字是,避免重复。
#include
#include
#include
using namespace s...
分类:
其他好文 时间:
2014-07-27 11:26:22
阅读次数:
260
用了和3Sum差不多一样的思路,二分查找。关键要剪枝,但是却在剪枝那里犯了很多错误。
然后原来有一个更加快的思路O(n^2).
#include
#include
#include
#include
using namespace std;
class Solution {
public:
int threeSumClosest(vector &num, int ta...
分类:
其他好文 时间:
2014-07-27 11:21:04
阅读次数:
165