首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

素数筛选算法

还可以更low一点吗…估计此时面试官和我都想问同一个问题:你到底有没有学过算法?...灵机一闪,思绪回到了大二算法课上,老师讲过一种叫做“筛法”的东东,不过好像记不太清了,我再想想… 半分钟后… 回来了,我感到它们全都回来了!...嗯…毫不留情,莫非还有更优的算法? “您容我再想想哈~”,陪着笑脸说完,双手抱头痛苦思考状/(ㄒoㄒ)/~~ 我的神呐…还有啥,还能怎么筛?...咋一看,算法阐述起来和普通的筛法并无二致,实际上,两者最重要的区别就在于: 有无重复筛除? 为什么有这个问题呢?...因此整个算法的复杂度是 $O(n)$ 的。 面试结果 ---- hmmmmmmmm… 当然,很愉快的,即使是在面试官迟到了1小时的情况下,TT还是很给面子,没让我过,我记住了,哼!

1K20
您找到你想要的搜索结果了吗?
是的
没有找到

如何用算法高效寻找素数

预计阅读时间:5 分钟 素数的定义很简单,如果一个数如果只能被 1 和它本身整除,那么这个数就是素数。 不要觉得素数的定义简单,恐怕没多少人真的能把素数相关的算法写得高效。...先来简单说下如果你要判断一个数是不是素数,应该如何写算法。...我们可以稍微优化一下,让j从i的平方开始遍历,而不是从2 * i开始: for (int j = i * i; j < n; j += i) isPrim[j] = false; 这样,素数计数的算法就高效实现了...其实这个算法有一个名字,叫做 Sieve of Eratosthenes。...其最终结果是 O(N * loglogN),有兴趣的读者可以查一下该算法的时间复杂度证明。 以上就是素数算法相关的全部内容。怎么样,是不是看似简单的问题却有不少细节可以打磨呀? 反向思考方能出其不意!

1.9K40

素数推断算法(高效率)

大家好,又见面了,我是全栈君 chuanbindeng 的 素数推断算法 关于素数算法是信息学竞赛和程序设计竞赛中常考的数论知识,在这里我跟大家讲一下寻找一定范围内素数的几个算法。...正如大家都知道的那样,一个数 n 假设是合数,那么它的全部的因子不超过sqrt(n)–n的开方,那么我们能够用这个性质用直观的方法 来求出小于等于n的全部的素数。...} 这就是一般的求解n以内素数算法。复杂度是o(n*sqrt(n)),假设n非常小的话,这样的算法(事实上这是不是算法我都怀疑,没有水平。...true的下标输出来: for(i=2; i<=30; i++) if(prime[i]) printf(“%d “,i); 结果是 2 3 5 7 11 13 17 19 23 29 这就是简单的素数筛选法...以下给出这两个算法的程序: //普通的方法: #include #include #define N 10000001 int prime[N]; int main(

28910

概率思维-成功人士基础的“人生算法

“确定效应”就是他们的“人生算法”。 但是,其实这道选择题,是有唯一正确答案的。绿色按钮的“期望值”更大(期望值为5000万),是理性的选择。“决策树”,就是你的“人生算法”。...可是,即便绿色按钮是正确理性的选择,我还是有一半可能什么都拿不到啊,怎么办?有没有一种办法,让我能确定地获得比100万更大的收益,增加我“赢”的概率呢?当然有。...这就是基于“概率思维”的另一种“人生算法”。 不同的“人生算法”,带来不同的选择,从而获得完全不同的人生。...而“概率思维”就是很多成功人士基础的“人生算法”, 在不完全信息决策的情况下,不是靠你的聪明才智或者努力,就一定能有正确决策的。

95660

机器学习--基础的最常用的聚类算法

基于划分聚类算法(partition clustering) K-means:是一种典型的划分聚类算法,它用一个聚类的中心来代表一个簇,即在迭代过程中选择的聚点不一定是聚类中的一个点,该算法只能处理数值型数据...优点:采用随机抽样与分割相结合的办法来提高算法的空间和时间效率,并且在算法中用了堆和K-d树结构来提高了算法效率,使其可以高效的处理大量数据。 缺点:对异常数据比较脆弱。...其他基于层次聚类算法如下: ?...基于密度聚类算法 DBSCAN:DBSCAN算法是一种典型的基于密度的聚类算法,该算法采用空间索引技术来搜索对象的邻域,引入了“核心对象”和“密度可达”等概念,从核心对象出发,把所有密度可达的对象组成一个簇...缺点:DBSCAN算法对参数Eps及Minpts非常敏感,且这两个参数很难确定。 ? 其他基于密度聚类算法如下: ? 从以下几个方面对几种常用的聚类算法进行综合性能评价,评价结果如下: ?

88140

算法基础-基础算法

for (auto x : a) cout << x << " "; return 0; } ---- 02.第k个数 题目描述 给定一个长度为 n 的整数数列,以及一个整数 k,请用快速选择算法求出数列从小到大排序后的第...这里可以运用我们性价比最高,代码最好写,效率特高的归并排序算法 归并排序中的左数组和右数组在内部都是有序且相对原数组中的位置都是从左到右的,我们可以利用这一性质当我们判断左数组中的某一个元素(下标为i)...l = mid + 1; // r = mid - 1; } // 如果是整数二分最终得到的l和r必定相等而且满足 check(l) 且 check(r); 当然本题用c++的算法库的二分查找函数...r + 1 >> 1; if(a[mid] <= x) l = mid; else r = mid - 1; } cout << l << endl; } } 算法库二分...l); return 0; } 高精度 01.高精度加法 02.高精度减法 03.高精度乘法 04.高精度除法 前缀和与差分 01.前缀和 02.子矩阵的和 03.差分 04.差分矩阵 双指针算法

1.5K40
领券