精华内容
下载资源
问答
  • python素数筛选法浅析

    2020-09-20 17:00:50
    主要为大家详细介绍了python素数筛选法的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 筛选法又称筛法,是求不超过自然数N(N>1)的所有质数的一种方法。据说是古希腊的埃拉托斯特尼(Eratosthenes,约公元前274~194年)发明的,又称埃拉托斯特尼筛子。 具体做法是: 先把N个自然数按次序排列起来。1...
  • Jupyter 使用列表实现筛选法求素数 使用列表实现筛选法求素数可以极大的提高计算机的运算速率。 maxNumber = int(input("请输入一个大于2的自然数:")) lst = list(range(2,maxNumber)) #最大整数的平方根 m = int...
  • 前言:之前的文章(高维数据中特征筛选方法的思考总结——单变量分析筛选法)中,对单变量分析筛选变量进行了初步考量,本文将进一步总结多变量分析筛选法。由于本文多处摘录网上的博客,只是进行了归纳整理,因此...

    前言:之前的文章(高维数据中特征筛选方法的思考总结——单变量分析筛选法)中,对单变量分析筛选变量进行了初步考量,本文将进一步总结多变量分析筛选法。由于本文多处摘录网上的博客,只是进行了归纳整理,因此笔者将本文定性为转载类(转载请注明出处:https://blog.csdn.net/fjsd155/article/details/93754257)。

    多变量分析方法根据建模特点可以分为线性降维和非线性降维。线性降维主要是 LASSO 和 PLS。非线性降维包括:XGBoost(GBDT的高效实现)、Random Forest 等。其实个人感觉CNN应该也是可以进行非线性降维的(但是目前CNN处理“非序列数据”并没有优势,笔者有个预处理的设想,准备尝试一下拓宽CNN的适用范围)。另外SVM这种强大的机器学习方法,似乎只能用来建模而不能筛选特征。

    LASSO和PLS都是线性模型的降维方法,也就是说,这两种方法甚至包括上述单变量降维的方法,最终筛选的变量都是为了建立线性模型而准备的,而不能孵育出非线性模型(如存在交互作用的模型、复杂的SVM模型、决策树类模型以及复杂的神经网络模型)。非线性模型的生物学解释性很差(黑箱模型),一般不推荐使用。但是若强行想构建非线性模型,则仅采用上述线性降维的方法是不够理想的,需要采用非线性降维。

    注意一个问题的存在:我们筛选特征往往基于训练数据(选择超参数或者最终建模常常会根据交叉验证,但是变量的筛选却常常只是基于训练集)。在训练数据中,变量的贡献程度越大,并不意味着这个变量越有价值。可能某些变量在模型中表现很普通,但是始终十分稳定(经得起考验);而有些变量在训练数据中表现很好,但外推性却较弱,表现波动大。因此变量的选择有必要综合训练数据和验证数据(如综合CV或Bootstrapping筛选变量)。最后再由独立测试数据进行检验。

    筛选特征及建模的科学观念:模型的可重复性(多批数据)>大样本建模>模型的准确性。有人提出(貌似是范剑青老师等人提出),“针对一个统计方法,统计准确性、模型可解释性和计算复杂性是衡量其好坏的三个重要指标。”

    (下面部分内容参考自:

    一些变量筛选方法——1、综述

    一些变量筛选方法——2、《An Introduction to Statistical Learning with R》上的数据降维方法

    一些变量筛选方法——3、部分其它变量筛选方法

    刚刚从线性与否的角度对降维方法进行了分类概述。另外,An Introduction to Statistical Learning with R 这本书中将筛选变量的方法分为:子集选择法(Subset Selection)系数压缩法(Shrinkage)映射降维法(Dimension Reduction)

    子集选择法

    子集选择法分为最优子集选择逐步筛选法等,这部分方法依赖于下述模型评判指标:

    • Mallows 提出运用Cp去评估一个以普通最小二乘法(Ordinary Least Square或OLS)为假设的线性回归模型的优良性,从而用于模型选择。
    • 日本学者 Akaike 在1974年基于极大似然方法提出了AIC准则,它建立在熵的概念基础上,可以权衡所估计模型的复杂度和此模型拟合数据的优良性。
    • Schwarz 在Bayes方法的基础上提出BIC准则。与AIC相比,BIC加强了惩罚力度,考虑了样本量,从而在选择变量进入模型上更加谨慎。
    • Seymour Geisser 提出了交叉验证法(Cross validation),利用交叉验证结合最小平方误差的方法,是一种在没有任何前提假定的情况下直接进行参数估计的变量选择方法。

    此外,还可以使用Adjusted R2进行评价来选择特征子集。这些指标的具体含义和使用方法,可参照An Introduction to Statistical Learning with R 或 一些变量筛选方法——2、《An Introduction to Statistical Learning with R》上的数据降维方法

    最优子集法(Best Subset Selection):其思想是将所有的特征组合都进行建模,然后选择最优的模型(最优的判断依据都是前面叙述的几种指标)。特点是能够找到全局最优但是计算量较大。

    逐步筛选法(Stepwise Selection)分为向前逐步回归与向后逐步回归。其主要思想是:每一次迭代都只能沿着上一次迭代的方向继续进行。向前逐步回归是指初始模型只有常数项,然后逐渐添加变量;向后逐步回归是指初始模型包含了所有变量,然后逐渐删除变量。特点是仅关注局部最优(贪心策略)难以保证全局最优(注:向前与向后逐步回归筛选出的变量可能不一样,但其思想完全一样。)

    系数压缩法

    系数压缩法主要指LASSO。岭回归只能实现系数压缩而不能降维,但是可以通过合理的调参,将系数压缩后对系数进行排序,从而实现降维(但既然LASSO已经还不错了,没必要强行使用岭回归降维)。

    LASSO可参考博客:LASSO回归

    映射降维法

    映射降维法主要指的是PLS。另外,PCR(主元回归法)是进行主成分分析(PCA)后,选取前几个主成分进行建模,但实际上建模的效果很一般;PLS是基于PCA的思想,结合回归建模、典型关联分析(CCA)以及拟合残差(带一点Gradient Boost)等各家思想,所孕育出的一种建模分析和降维方法。

    PLS可参考博客:偏最小二乘法 Partial Least Squares

    其他不错的方法

    除了上述三大类方法,树结构的方法以及Boosting类的方法也是比较有效的,如:Random ForestXGBoost(GBDT的高效实现)等。此外,Fan和Li 结合L0与L1范数提出的SCAD (Smoothly Clipped Absolute Deviation);Fan 提出的SIS(Sure Independence Screening)等。

    Random Forest

    随机森林模型本身是用于预测的模型,但在预测过程中,可以对变量重要性进行排序,然后通过这种排序来进行变量筛选。

    变量重要性评判用Gini指数为标准,针对一棵树中的每个节点 k,我们都可以计算一个Gini指数:
          

    其中\hat{p}_k表示样本在节点 k 属于任意一类的概率估计值。

    一个节点的重要性由节点分裂前后Gini指数的变化量来确定:
          

    G_{k1} 和G_{k2} 分别表示G_{k} 产生的子节点。针对森林中的每棵树,都用上述的标准来递归产生,最终随机抽取样本和变量,产生森林,假设森林共产生 T 棵树。

    森林中,如果变量X_i 在第 t 棵树中出现 M 次,则变量X_i 在第 t 棵树的重要性为:
          

    X_i 在整个森林中的变量重要性为:
          
    最终我们根据变量重要性来选择变量,选择的个数可以用SIS中的方法,选取n−1 或n/logn 个。

    XGBoost

    GBDT的建模过程是,一步步拟合残差,那么在一步步的拟合的过程中,也便是变量选择的过程(从一定程度上实现了变量的筛选)(这种逐步拟合残差的思想的方法还有PLS)。XGBoost是GBDT的高效实现方法。

    GBDT的介绍可参考:GBDT

    XGBoost 的介绍可参考:XGBoost

    SCAD

    与岭回归相比,SCAD降低了模型的预测方差,与此同时与LASSO相比,SCAD又缩小了参数估计的偏差,因而受到了广泛的关注。L0方法只会进行变量筛选,不会进行压缩,L1(LASSO)既会进行变量筛选,也会对系数继续一定的调整。而SCAD可以从图中很明显的其结合了两种方法,对系数较大的变量不进行惩罚,对系数较少的进行压缩或者删去,因此这种方法既可以筛选变量,也有着Oracle的性质。SCAD虽然有相应的迭代算法,但是由于其复杂度高,所以计算速度相对较慢

    SCAD的产生,有点借鉴Elastic Net。

    SIS

    当遇到超高维数据,即维数P无穷大时,上述的算法会出现问题。针对这类超高维问题,Fan等人提出了SIS的方法。

    针对线性回归模型(2),按照SIS的思想,首先Y为中心化向量,计算Y与每一个自变量x_i 的相关系数,记为 \omega=X^TY

    其中\omega=(\omega_1,\omega_2,...,\omega_p)^T,若\omega_i越大,说明x_i与Y 相关性越强。所以,可以根据 |\omega_i| 的大小来进行变量选择。对任意的\gamma \in (0,1),对 |\omega_i| 进行从大到小排序,然后取其一个子集

          

    其中,n是样本数,[\gamma n] 是\gamma n 的整数部分,进而保证了[\gamma n]<n,与之对应的自变量则入选模型。如果觉得选择 [\gamma n] 不便于确定,可以选择 n-1 或n/logn。

    而关于相关系数,可以选用自己认为合适的。本文后面的模拟选用传统的Pearson相关系数,以及近几年比较火的可用于检验独立的无参数假设的距离相关性(Distance Covariance)(见:一些变量筛选方法——3、部分其它变量筛选方法)。

    严格来说,SIS 属于单变量分析方法。

    另外,SIS有一些衍生版本,如DC-SIS及Qa-SIS等,其中Qa-SIS好像是可以处理非线性问题的(据说还是“异方差”)。

    PDAS

    原始对偶激活集算法(Primal Dual Active Set,PDAS)是一个非常新的方法,但做的事情是最优子集选择的事情。其主要思想是引入激活集,对所有的 β 进行批量迭代更新。这个方法的优势在于,可以处理超高维数据(上万维),而最优子集选择一旦超过了50维,基本就完全没办法进行运算。后面我们也将采用PDAS来进行模拟。

    PDAS的介绍可参考:一些变量筛选方法——3、部分其它变量筛选方法

     

    另外,有人总结了7种降维方法(七种降维方法):

    1. 缺失值比率 (Missing Values Ratio) ;
    2. 低方差滤波 (Low Variance Filter) ;
    3. 高相关滤波 (High Correlation Filter);
    4. 随机森林/组合树 (Random Forests);
    5. 主成分分析 (PCA);
    6. 反向特征消除 (Backward Feature Elimination);
    7. 前向特征构造 (Forward Feature Construction)。

    本文的总结其实基本上都包含了这些内容。

    也有人总结了12种降维方法(在以上7种方法基础上加了5种)(来源:Analytics Vidhya:The Ultimate Guide to 12 Dimensionality Reduction Techniques (with Python codes),也可参考:12种降维方法终极指南(含Python代码)):

    1. 缺失值比率:如果数据集的缺失值太多,我们可以用这种方法减少变量数。
    2. 低方差滤波器:这个方法可以从数据集中识别和删除常量变量,方差小的变量对目标变量影响不大,所以可以放心删去。
    3. 高相关滤波器:具有高相关性的一对变量会增加数据集中的多重共线性,所以用这种方法删去其中一个是有必要的。
    4. 随机森林:这是最常用的降维方法之一,它会明确算出数据集中每个特征的重要性。
    5. 向后特征消除:耗时较久,计算成本也都很高,所以只适用于输入变量较少的数据集。
    6. 前向特征选择:思路类似于“向后特征消除”。
    7. 因子分析:这种方法适合数据集中存在高度相关的变量集的情况。
    8. 主成分分析(PCA):这是处理线性数据最广泛使用的技术之一。
    9. 独立分量分析(ICA):我们可以用ICA将数据转换为独立的分量,使用更少的分量来描述数据。
    10. 基于投影的方法:ISOMAP适合非线性数据处理。
    11. t分布式随机邻域嵌入(t-SNE):也适合非线性数据处理,相较上一种方法,这种方法的可视化更直接。
    12. UMAP:用于高维数据,与t-SNE相比,这种方法速度更快。

          

    之后有空可以再总结下 t-SNE(无监督降维方法,主要用于高维度数据的降维可视化)。

    另外,scikit-learn机器学习工具包的官网也有一些特征筛选的方法介绍,有博客基于此进行了介绍(原文:http://dataunion.org/14072.html,但是好像原文访问不了了,可以看看转载的博客,比如:几种常用的特征选择方法,或 干货:结合Scikit-learn介绍几种常用的特征选择方法 )。

    除了这些,还有一些方法也值得一试,如:随机投影(Random Projections),非负矩阵分解(N0n-negative Matrix Factorization),自动编码(Auto-encoders),卡方检测与信息增益(Chi-square and information gain), 多维标定(Multidimensional Scaling), 相关性分析(Coorespondence Analysis),聚类(Clustering)以及贝叶斯模型(Bayesian Models)。

    基于聚类的方法,可以参考:

    特征筛选(变量聚类proc varclus)

    聚类特征变量选取、聚类算法与效果评价简述

    特征选择(二)-聚类变换

    还有互信息法模拟退火法以及一些组合策略等,之后再了解一下。参考:

    特征选择(2):特征选择:方差选择法、卡方检验、互信息法、递归特征消除、L1范数

    模拟退火筛选变量

    特征选择的策略--数据相关性(皮尔逊系数)与gini或者信息熵的的结合

    特征选择之基于相关性的特征选择(CFS)

    自编码器也是不错的无监督降维方法,是一种神经网络,之后可以研究下。

     

    各种方法的对比评测及代码示例

    这部分内容可以参考:

    一些变量筛选方法——4、模拟实验

    一些变量筛选方法——5、真实数据与总结

    一些变量筛选方法——6、代码

     

    参考资料

    一些变量筛选方法——1、综述

    一些变量筛选方法——2、《An Introduction to Statistical Learning with R》上的数据降维方法

    一些变量筛选方法——3、部分其它变量筛选方法

    一些变量筛选方法——4、模拟实验

    一些变量筛选方法——5、真实数据与总结

    一些变量筛选方法——6、代码

    LASSO回归

    偏最小二乘法 Partial Least Squares

    GBDT

    XGBoost

    七种降维方法

    The Ultimate Guide to 12 Dimensionality Reduction Techniques (with Python codes)

    Comprehensive Guide on t-SNE algorithm with implementation in R & Python

    12种降维方法终极指南(含Python代码)

    特征筛选(变量聚类proc varclus)

    聚类特征变量选取、聚类算法与效果评价简述 

    特征选择(一)-维数问题与类内距离

    特征选择(二)-聚类变换

    展开全文
  • 本文实例为大家分享了python计算小于给定数字的所有素数的具体代码,供大家参考,具体内容如下 ... '''筛选法获取小于maxNumber的所有素数''' #待判断整数 lst = list(range(3, maxNumber, 2)) #最大整数的平方根
  • 主要介绍了java使用筛选法求n以内的素数示例(java求素数),需要的朋友可以参考下
  • 快速筛选素数:埃拉托色尼筛选法 只有一行的算法:欧几里得算法求解最大公约数 求幂乘:反复平法法 筛选素数 小学的知识点,不解释了; bool isPrime(int d){//判断是否是素数 if(d==2) return true; if(d<2|...
  • c++素数筛选法

    2020-12-25 21:51:30
    素数筛选法是指一种非常规的素数判定方法,比较高效率; 原理:任何数的整数倍必定不是素数,大于二的偶数必定不是素数。 我们以找出100以内的素数为例,利用原理,我们可以首先排除偶数是素数,然后进一步判断奇数 ...
  • 在数理统计中,方差是测算随机变量离散趋势最重要、最常用的指标,方差是各变量值与其均值离差平方的平均数,它是测算数值型数据离散程度的最重要的方法。 当数据分布比较集中时,各个数据与平均数的差的平方和较小...
  • 基因组学、转录组学、蛋白组学及代谢组学等生信问题...对于这个问题,将分为两篇文章进行探讨,本文着重探讨单变量分析筛选法。 常规方法的问题 常规的方法是使用P值法和FC值法。所谓P值法,就是对两组样本进行 ...

    基因组学、转录组学、蛋白组学及代谢组学等生信问题(高通量数据)中,面临的第一步往往就是降维(或者说筛选特征)。降维方法分为两大类:单变量分析降维法、多变量分析降维法。单变量降维常常使用FC值或者P值,多变量降维常常使用LASSO和PLS等方法。对于这个问题,将分为两篇文章进行探讨,本文着重探讨单变量分析筛选法。

    常规方法的问题

    常规的方法是使用P值法和FC值法。所谓P值法,就是对两组样本进行 t 检验(或非参数检验);所谓FC值(Fold Change)法,就是求两组样本之间的倍数变化。如果结合P值和FC值综合分析进行来筛选特征(火山图),在绝大多数情况下效果很好;但是方法没有完美的,FC值法和P值法都有其局限性。

    FC值法的缺陷

    先看FC值的缺陷:

    代谢物X在A组15个病例中的峰值分别是:92,95,95,96,96,97,98,100,101,101,101,102,102,103,103,中位数或平均数大致为100;

    代谢物X在B组15个病例中的峰值分别是:106,107,108,108,108,108,109,110,111,112,112,112,113,113,115,中位数或平均数大致为110。

    代谢物X的FC值(B/A)为1.1。若此时设定FC值以1.2作为界值,X将被排除出模型;然而X可能是一个很好的biomarker,无辜出局。

    那么,何时用FC值呢?FC值方法有个特点:FC值越接近1的变量(或者说logFC越接近0的特征),成为好的biomarker的概率越低。也就是说,噪音变量特别多的时候,采用FC值去排除噪音变量的效率很高。亦即信噪比很低时,FC很管用。所以在特征特别多的任务中,初筛变量的第一步会用FC爽一爽。但若建模效果不理想,有可能是初筛时排除了有效的特征,这个时候应该回过头来放宽界值甚至去除FC标准。

    P值法的缺陷

    刚刚说的FC值法,实际上触发了假阴性的情况,那么p值其实也有类似情况,当选用非参数检验时,假阴性率会上升。因此慎用非参数检验方法。同样的道理,若初筛后发现建模效果不理想,可以回过头来放宽界值甚至选择统计学检验效能更强的方法。

     

    挽救方法

    挽救方法又称“豁免方法”,也就是说使用该方法认为某个特征值得保留,但在原方法中已经出局,此时可以强制保留这个特征。笔者根据自己的思考,大致提出3种挽救方式:IQR差异法、界值分类法、放宽标准方式。其中IQR差异法是笔者原创,界值分类法是笔者根据统计分析经验进行的改造。这些方法在代谢组学课题中应用效果不错。

    FC值法的豁免方法

    IQR差异法:任意特征在两组都可以求出25%、50%、75%这3个百分位数值,据此定义重合度。若其中一组的25%值大于另一组的75%值,则重合度为0;若A组的50%值大于B组的75%值、且A组的25%值大于B组的50%值,则重合度为1,反之亦然;若A组的50%值大于B组的75%值、或A组的25%值大于B组的50%值,则重合度为2,反之亦然;剩余的情况,重合度为3。重合度越大,差异越小。可根据情况选择不同的重合度作为界值来筛选变量。比如,该特征的重合度小于2时,可优先考虑(作为挽救特征的方法:即使FC值不显著,但是IQR显著,则仍保留)。

    P值法的豁免方法

    界值分类法:选择一个合适的界值将变量转化为分类变量,之后进行统计学检验,包括卡方检验、率差检验、Logistic单变量建模、一致性检验等等方法。

    界值的选取其实是个值得琢磨的地方,通常情况下会选择整体数据的中位数进行二分类,但是两组样本量不平衡时,也可以根据样本量比例选择相应的百分位点值;最终模型敲定特征后,可以进一步优化界值。因此,界值分类法要做得精致,也并不是一件简单的事。选取界值有个较主观的技巧,当建模的目的是为了挑选出其中某一个类别时(该类别成为“目标类别”)(不是单纯为了更好地分类时),可以结合IQR差异法,以目标类别的50%值作为界值(笔者自己构造的特殊界值点)。这是一种个性化的统计学方法。

    界值分类后,大致可以选用4种检验方法:卡方检验、率差检验(两组率的差异检验)、Logistic单变量分析、一致性检验。这4种在大多数情况下结果是差不多的,但是各方法有不同的侧重点。此处以对比卡方检验和Logistic单变量分析为例:卡方注重检验“差别”,Logistic回归注重检验“关联”。卡方的p值很小说明差别大,Logistic回归p值很小说明关联大。虽然很多情况下,差别大意味着关联大,但是有些中间模糊地带,差别稍大但不足以很相关。因此卡方检验和Logistic单变量分析在某些少数情况下结论是不一致的。

    标准放宽的方法

    除了放宽界值,有时候甚至可以将FC值法和P值法的关系改为“且”,就是说,FC值法和P值法同时认定需要剔除某些特征时,才剔除这些特征。将降维的重心移交给多变量分析。有时候甚至直接舍弃FC值法。这是个权衡的过程,没有绝对的标准。

     

    关于FDR校正

    在高维数据中,由于特征很多,做单变量分析时,很有可能增大假阳性发现。比如对于10000个特征,分别进行单因素检验,则相当于做了10000次多重检验。需要进行p值校正。最简单粗暴的校正方法是Bonferroni 校正,直接将每个变量的检验水准除以检验次数,惩罚力度过大,容易产生较大的假阴性。最常用的校正方法是FDR校正方法。

    FDR表示假阳性发现率False Discovery Rate),意思是保证发现的biomarker集合中,假阳性的biomarker的比例低于一个界值(比如0.05;比如用这个水准找到了100个biomarker,则认为只要5个是假阳性发现)。FDR又称Q value,或 adjust p value。校正方法此处不赘述(网上很多资料)。

    但笔者对FDR这种方法持有保守态度,因为校正更容易造成假阴性。举个栗子,对于某些真实有效的biomarker,可能在大部分数据中,其检验的p值都在0.01左右,但是采用FDR校正,则这种biomarker难逃一劫。

    但是如果两批数据都是高通量数据,若取交集来筛选biomarker(检验水准都是0.05),则惩罚力度仍然不够。因此,比较好的模式应该是,在高通量(非靶向)数据中找到biomarker,然后再在新的样本中靶向检测这些biomarker,若能得到验证的则认为更可靠

     

    关于多变量分析降维法,请参考:高维数据中特征筛选方法的思考总结——多变量分析筛选法

     

    展开全文
  • 筛选法的C++实现

    2020-09-04 23:17:12
    筛选法又称筛法,是求不超过自然数N(N>1)的所有质数的一种方法。据说是古希腊的埃拉托斯特尼(Eratosthenes,约公元前274~194年)发明的,又称埃拉托斯特尼筛子
  • GJB1032电子产品环境应力筛选方法.pdf
  • 在电子元器件的筛选中,要注意质量控制,统筹兼顾,科学选择,简化设计,合理运用元器件的性能参数,发挥电子元器件的功能作用。要控制元器件的质量。选择元器件做到统筹兼顾,...总结了一些电子元器件检测与筛选方法
  • 筛选法

    千次阅读 2019-07-20 18:41:12
    筛选法又称筛法,具体做法是:先把N个自然数按次序排列起来。1不是质数,也不是合数,要划去。第二个数2是质数留下来,而把2后面所有能被2整除的数都划去。2后面第一个没划去的数是3,把3留下,再把3后面所有能被3...

    筛选法又称筛法,具体做法是:先把N个自然数按次序排列起来。1不是质数,也不是合数,要划去。第二个数2是质数留下来,而把2后面所有能被2整除的数都划去。2后面第一个没划去的数是3,把3留下,再把3后面所有能被3整除的数都划去。3后面第一个没划去的数是5,把5留下,再把5后面所有能被5整除的数都划去。这样一直做下去,就会把不超过N的全部合数都筛掉,留下的就是不超过N的全部质数。因为希腊人是把数写在涂腊的板上,每要划去一个数,就在上面记以小点,寻求质数的工作完毕后,这许多小点就像一个筛子,所以就把埃拉托斯特尼的方法叫做“埃拉托斯特尼筛”,简称“筛法”。(另一种解释是当时的数写在纸草上,每要划去一个数,就把这个数挖去,寻求质数的工作完毕后,这许多小洞就像一个筛子。)
    //用筛选法求100之内的素数:
    #include<stdio.h>

    void Primenumber()
    {
    int arr[100];
    int i;
    int j;
    //1不是素数,从2开始
    for(i=2;i<100;i++)
    {
    arr[i]=i;
    for(j=2;j<i;j++)
    {
    //能被它前面的数整除的,说明不是素数,都淘汰掉。
    if(arr[i]%j==0)
    {
    arr[i]=0;
    }
    }
    //把素数输出。
    if(arr[i]!=0)
    {
    printf("%d\n",arr[i]);
    }
    }
    }

    int main()
    {
    Primenumber();
    return 0;
    }

    展开全文
  • Eratosthenes筛选法求质数.rar
  • python语言对于计算机专业的学生,不管是计算机软件还是物联网,都是很重要的一种编程语言,python未来在人工智能方向上是会有很大的贡献程度...python学习—–使用列表实现筛选法求素数目录一、列表实现筛选法求素数的
  • 筛选法求素数

    2012-10-09 12:59:12
    以C++为编程语言,筛选法,编写的求一个数以内的素数
  • 【C语言】 利用筛选法求100以内的素数

    万次阅读 多人点赞 2018-10-27 09:41:29
    //C语言 筛选法求100以内的素数 //原理很简单,就是当i是质(素)数的时候,i的所有的倍数必然是合数。如果i已经被判断不是质数了,那么再找到i后面的质数来把这个质 //数的倍数筛掉。 //我们将从2开始 用2除后面的数...

    算法思路:

    原理很简单,就是当i是质(素)数的时候,i的所有的倍数必然是合数。如果i已经被判断不是质数了,那么再找到i后面的质数来把这个质数的倍数筛掉。

    代码如下:

    //C语言 筛选法求100以内的素数
    //原理很简单,就是当i是质(素)数的时候,i的所有的倍数必然是合数。如果i已经被判断不是质数了,那么再找到i后面的质数来把这个质
    //数的倍数筛掉。
    //我们将从2开始 用2除后面的数,如果后面的数能被2整除 那么那个数一定不是素数
    #define N 100 
    #include "stdio.h"
    int main(){
    	int i,j;
    	int arr[N];
    
    	for(i = 0;i<N;i++){//对数组赋值  1-100
    		arr[i]=i+1;
    	}
    	arr[0] = 0;//1不是素数,所以将下标0 的元素设置为0
    	
    	//进行素数判断:我们将从2开始 用2除后面的数,如果后面的数能被2整除 那么那个数一定不是素数,将那个数置为零
    	for(i = 1;i < N-1;i++){
    		for(j = i+1;j < N;j++){
    			if(arr[i] != 0 && arr[j] != 0)//如果进行到3的时候2后面一定有数被置为0了,这里我们需要判断一下是不是有0
    			if(arr[j] % arr[i] == 0){
    				arr[j] = 0;
    			}
    		}
    	}
    	//循环输出
    	for(i = 0;i<N;i++){
    		if(arr[i] != 0)
    			printf("%d\n",arr[i]);
    		
    	}
    
    return 0;
    }

    结果如下:

     

     

     

    展开全文
  • 任意输入一数n,求1到n-1的素数。埃式筛选法,效率高!
  • j筛选法求素数

    2012-12-29 08:26:00
    筛选法求素数,在大范围内求素数比其他方法高效很多。
  • 质数筛选法

    2016-12-14 10:02:06
    近期刷题遇到质数的问题比较多,于是就去搜索了一些关于质数的问题,下面是我的一点总结,就作为学习知识的记录吧。...质数筛选法 : * (1)埃拉托色尼筛法(时间复杂度O(nlogn)) * (2)欧拉筛法 (时间复杂度O(n))
  • 使用筛选法来确定100以内的素数并将其输出 使用时请在dev运行
  • 特征选择/筛选方法总结

    万次阅读 多人点赞 2019-03-30 14:51:16
    皮尔森相关系数是一种最简单的,能帮助理解特征和响应变量之间关系的方法,该方法衡量的是变量之间的线性相关性,结果的取值区间为[-1,1],-1表示完全的负相关(这个变量下降,那个就会上升),+1表示完全的正相关,0...
  • 为了能够更好地满足用户对服务组合的需要,文中首先给出了多层次组合Web服务的筛选模型,并将多层次组合Web服务筛选模型分为五个步骤。在此基础上将Web服务的属性分为功能属性...最后给出了多目标方案筛选方法及其实验。
  • C语言之筛选法

    千次阅读 2019-10-16 22:45:07
    1.用筛选法求100之内的素数; 筛选法:1不是素数,划去; 2是素数,留下,将2的倍数划去; 3没被划去,将3的倍数划去; 以此类推,将i的倍数划去; 留下的就是素数; 下面是实现的代码:两种均可,只有一点细微区别...
  • 以下是使用筛选法建立最小堆的代码,用于建堆的数据为{35,26,48,10,59,64,17,23,45,31}。 筛选法也即,从堆的最右下一个分支节点起,自下而上遍历每一个分支节点,使得以该分支节点为根的子树成为最小堆。 //筛选...
  • 采用筛选法和插入法进行堆排序 oid HeapSort(int r[],int n) { int i,j; for(j=n;j>=1;j--) { for(i=j/2;i>0;i--) SiftHeap(r,i,j); r[0]=r[1];r[1]=r[j];r[j]=r[0]; }

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 323,435
精华内容 129,374
关键字:

筛选法