素数打表(4种方法)

您所在的位置:网站首页 质数表1000以上 素数打表(4种方法)

素数打表(4种方法)

2024-07-14 03:00| 来源: 网络整理| 查看: 265

1既不是素数也不是合数

打表:是一种典型的用空间换时间的做法,一般指将所有可能需要用到的结果事先计算出来,这样以后后面需要用到时就可以直接查表获得。

在什么情况下我们需要打表?

(1)在程序中一次性计算出所有需要用到的结果,之后查询直接取这些结果。

举个例子,假如我们算Fibonacci数中的F(n)我们假如需要算很多次Q次 比如:(10^6),每次我们都是从头开始算的,对于Q次查询就会产生(nQ)的时间复杂度,但是如果我们提前把所有(足够大的n,大于题上给的范围)都事先算出来,并存在数组中,那么我们每次查询就只需要O(1)的时间复杂度,Q次查询就只需要O(Q+n)的时间复杂度,O(n)是预处理时间,

(2)在程序B中分一次或多次计算出所有需要用到的结果,手工把结果写在程序A的数组中,然后在程序A中就可以直接使用这些结果。

这种用法一般是当程序的一部分过程消耗的时间过多(比如你的DFS(搜索),递归),或者是没有想好的算法,因此在另一个程序中使用暴力算法出结果,这样就能直接在源程序中使用这些结果(记忆化搜索,避免重复递归(搜索),你已经搜过一次用一个数保存在数组内,当下次再搜索到这里是直接调用这的值即可),比如对n皇后问题的方案数,如果饰演使用的算法不够好,就容易超时,而可以在本地程序计算出所有对n来说n皇后问题的方案数,然后把算出的结果保存在数组中,就可以根据题目输入的n来直接找出结果。

(3)对一些不会做的题目,我们可以打个表,暴力程序程序计算出小范围数据的结果,然后找规律,相信你一定可以发现  “蛛丝马迹”。

适用于你不会,但是感觉这道题可能存在规律的题

然后进入我们的今天要学习的素数打表 第一种傻瓜打表:

每次判断这个数是否为素数,如果是就存在数组内,

优点:太好想了,

缺点:时间复杂度太高(n ^ 2)

#include #include #include #include using namespace std; int main(){ int n; cin>>n; int a[10000]; int i,j; int q = 0; for(i = 2; i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3