9.7数学与概率(七)——检查n能否被素数整除

/**

* 功能:检查n能否被素数整除。

*/

	/**
	 * 生成素数序列:埃拉托斯特尼筛法
	 * 原理:剔除所有可能被素数整除的非素数。
	 * 思路:列出到max为止的所有数字。
	 * 		1)划掉所有可能被2整除的数(2保留)。
	 * 		2)找到下一个素数(即下一个不会被划掉的数),并划掉所有可被它整除的数。
	 * 		3)最终得到2到max之间的素数序列。
	 * 可优化为:只将奇数放进数组,空间即可减半。
	 * @param max
	 * @return
	 */
	public static boolean[] sieveOfEratosthenes(int max){
		boolean[] flags=new boolean[max+1];//从0开始,共max+1位。便于元素的下标与数字相对应
		int count=0;

		init(flags);//将flags中除0,1元素除外的所有元素设为true
		int prime=2;

		while(prime<=max){
			//划掉余下为prime倍数的数字
			crossOff(flags,prime);

			//找出下一个位true的值
			prime=getNextPrime(flags,prime);

			if(prime>=flags.length)
				break;
		}

		return flags;
	}

	//划掉余下为prime倍数的数字
	public static void crossOff(boolean[] flags,int prime){
		/**
		 * 划掉余下为prime倍数的数字,可以从prime*prime开始,因为如果k*prime且k<prime,
		 * 这个值早就在之前的迭代里划掉了。
		 */
		for(int i=prime*prime;i<flags.length;i+=prime){
			if(i%prime==0)
				flags[i]=false;
		}
	}

	//找出下一个位true的值
	public static int getNextPrime(boolean[] flags,int prime){
		int next=prime+1;
		while(next<flags.length&&!flags[next]){
			next++;
		}
		return next;
	}

	public static void init(boolean[] flags){
		for(int i=0;i<flags.length;i++){
			flags[i]=true;
		}
	}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-06 11:15:22

9.7数学与概率(七)——检查n能否被素数整除的相关文章

POJ3682King Arthur&#39;s Birthday Celebration(数学期望||概率DP)

King Arthur is an narcissist who intends to spare no coins to celebrate his coming K-th birthday. The luxurious celebration will start on his birthday and King Arthur decides to let fate tell when to stop it. Every day he will toss a coin which has p

《统计思维程序员数学之概率统计第2版》中英文PDF+数据代码+《面向数据科学家的实用统计学》中英文PDF+源代码+学习总结

作为一个程序员,我认为,不需要把数学全部学完,要选择合适自己的资料. <统计思维:程序员数学之概率统计(第2版)>以程序模拟的方式而不是数学教材上毫无来由的定理解释了大多数统计上的基本概念.<统计思维:程序员数学之概率统计(第2版)>,中文PDF,带书签目录,204页,文字可以复制.<统计思维:程序员数学之概率统计(第2版)>,英文PDF,带书签目录,225页,文字可以复制. 配套python源代码+数据. 下载:https://pan.baidu.com/s/1Jju

9.7数学与概率(六)——检查一个数是否为素数

/** * 功能:检查一个数是否为素数. */ 两种方法: 方法一: /** * 思路:从2到n-1进行迭代,每次迭代都检查能否整除. * @param n * @return */ public static boolean primeNaive(int n){ if(n<2) return false; for(int i=2;i<n;i++){ if(n%i==0) return false; } return true; } 方法二:优化 /** * 思路:优化版 * 从2开始,迭代到

统计思维-程序员数学之概率统计-云图

封面 简介 本书是一本全新的概率统计入门教材,重点介绍如何用统计学方法分析大型数据集.本书会介绍如何使用计算机实现各种统计方法,这有诸多优点. 学生可以通过编写程序来深化和检查自己对概念的理解. 例如, 编写计算最小二乘拟合. 残差和判定系数的函数, 编写和测试这些代码需要他们正确理解相关概念,消除各种可能的误解. 学生能够通过计算实验来验证统计学上的一些定理. 例如, 生成服从各种分布的样本来验证中心极限定理(Central Limit Theorem,CLT). 当发现服从帕累托分布的样本并

数学1——概率与数学期望

1.什么是数学期望? 数学期望亦称期望.期望值等.在概率论和统计学中,一个离散型随机变量的期望值是试验中每一次可能出现的结果的概率乘以其结果的总和. 这是什么意思呢?假如我们来玩一个游戏,一共52张牌,其中有4个A.我们1元钱赌一把,如果你抽中了A,那么我给你10元钱,否则你的1元钱就输给我了.在这个游戏中,抽中的概率是$\frac{1}{13} ( \frac{4}{52} ) $,结果是赢10元钱:抽不中概率是$\frac{12}{13}$,结果是亏1元钱.那么你赢的概率,也就是期望值是$-

9.7数学与概率(一)——给定直角坐标上的两条线,确定这两条线会不会相交

/** * 功能:给定直角坐标上的两条线,确定这两条线会不会相交. */ public class Line { static double epsilon=0.000001; public double slope;//斜率 public double yintercept;//与y轴的截距 public static void main(String[] args) { // TODO Auto-generated method stub } /** * 假设: * 1)若两条线是相同的(斜

HDU 4438 Hunters (数学,概率计算)

题意:猎人A和B要进行一场比赛.现在有两个猎物老虎和狼,打死老虎可以得X分,打死狼可以得Y分.现在有两种情况: (1)如果A与B的预定目标不同,那么他们都将猎到预定的目标. (2)如果A与B的预定目标相同,A杀死目标的概率为P,B杀死这个目标的概率为1-P.接着他们将猎取第二只猎物,概率同上. 现在A知道B选择老虎作为他的首目标的概率为Q,B选狼作为首目标的概率为1-Q.所以A必须选择他的首目标,来使得他的期望分数最高. 析:分情况讨论么,首先选Tiger,再选Wolf,看看哪个大,就选哪个,比

数学(概率):HNOI2013 游走

[题目描述] 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点,获得等于这条边的编号的分数.当小Z 到达N号顶点时游走结束,总分为所有获得的分数之和. 现在,请你对这M条边进行编号,使得小Z获得的总分的期望值最小. [输入格式] 第一行是正整数N和M,分别表示该图的顶点数 和边数,接下来M行每行是整数u,v(1≤u,v≤N),表示顶点u与顶点v之间存在一条边. 输入保证3

机器学习中的数学系列-概率与统计

1,基本概念 (1)期望 \( E(X)=\sum_i{x_ip_i} \) ------------------- important ---------------- E(kX) = kE(X) E(X+Y) = E(X)+E(Y) 当X和Y相互独立:E(XY)=E(X)E(Y) (这个不能反向推哦) ----------------------------------------------- (2)方差 \( D(X)=\sum_i{(x_i-E(X))^2p_i} \) 从这个式子可以