`
show213
  • 浏览: 6610 次
社区版块
存档分类
最新评论

素数的封装

    博客分类:
  • Java
 
阅读更多
求0-100间的素数
分析如下:
如果一个数 m ,能够被从2到 它加 1 的平方根之间的任何一个数整除了,
那么它就是一个合数,
否则,
不能被任何从2到它加 1 的平方根之间的任何一个数整除,
那么它就是一个素数。
public  boolean isZhiShu(int number) {
		// 判断是否是质数的方法
		if (number == 1) {
			return false;
		}
		for (int i = 2; i < number; i++) {
			if (number % i == 0) {
				return false;
			}
		}
		return true;
	}	



代码实现起来,并不是很难。

那现在我写个方法来把这小应用封装起来,方法参数传入最大值和最小值,返回一个数组。

public int [] ZhiShu(int min, int max){

     int data[] = new int[max];
  //中间为实现代码
     return data;
}


实现这个方法有几种思路,其中唯一的难点就是数组的大小该如何定义,如果只是像上面的代码所写填最大值,那么100个无疑对系统的巨大开销,实际上输出来的数也只有十分之三。
那有没有有几个就装几个的方法呢?
有,而且不止一种,下面来看代码

1.用List来实现:
public int[] ZhiShu(int min, int max) {
		List<Integer> list = new ArrayList<Integer>();
		Integer it = null;
		for (int i = min; i <= max; i++) {
			if (isZhiShu(i)) {
				it = new Integer(i);
				list.add(it);
			}
		}
		int data[] = new int[list.size()];
		int index = 0;
		Iterator<Integer> itr = list.iterator();

		while (itr.hasNext()) {

			Integer ite = (Integer) itr.next();
			data[index++] = ite;
		}
		return data;

	}



2.用ByteArrayOutputStream来实现.字节输出流
public byte[] ZhiShu(int min, int max) {
		ByteArrayOutputStream bo = new ByteArrayOutputStream();
		byte k[] = null;
		for (int i = min; i <= max; i++) {
			if (isZhiShu(i)) {
				bo.write(i);
			}
			k = bo.toByteArray();
		}
		return k;
	}





3.CharArrayWriter 字符输出流
public char[] ZhiShu(int min, int max) {
		CharArrayWriter bo = new CharArrayWriter();
		char k[] = null;
		for (int i = min; i <= max; i++) {
			if (isZhiShu(i)) {
				bo.write(i);
			}
			k = bo.toCharArray();
		}
		return k;
	}




以上三种方法,就满足本题的需求而言,第二种方法的效率和开销来说都是最小的,但这个方法一旦超过127就会出问题。
也许还有其它的方法,但由于本人技术实力有限,故只能想出这么多。如果有还希望读者能补充。


0
2
分享到:
评论
2 楼 shenqidekobe 2013-06-24  
参考BigInteger.ONE
1 楼 OpenMind 2013-06-24  
对于100以内的25个素数,如果用得很多的话,我觉得最好的方式就是静态写死在代码里面比较好。

相关推荐

    java 类和对象封装性

    java 类和对象封装性,是java基础学习的ppt,有助于java自学·

    图文介绍c#封装方法

    1.计算1-100之间的所有质数(素数)的和。 代码: 2.程序执行结果: 3.用方法实现:有一个数组,找出其中最大值。不能调用数组的Max方法 代码: 4.程序执行结果: 5.用方法实现:有一个字符串数组,请输出最长的...

    素数求法的C语言源代码

    求任意区间内的全部素数的算法源代码 简单易懂 只要1分

    两个素数类(C++实现)

    做ACM时,时不时用到。于是为了简单,就直接封装了两个不同方法构造的素数类。因为比较简单,就没加什么注释。 CPrime类中有个printf忘了去掉,抱歉。

    PrimeNumber

    最快的素数筛法, 3秒初始化后在P4上能算出2^31 以内素数个数,之后10ms内算出任意 0-2^31之间素数个数 (为节省99%的存贮时间而不存贮).

    二元扩域sm2签名与验签算法python实现(已封装,可直接使用)

    第二部分为F2^m域上的模运算的点运算实现,被封装为一个类,方便使用,并附带测试代码。第三部分为F2^m域上的签名与验签算法的实现,其中要用到素数域Fn上的模逆运算,已进行相关注释。 网上素数域的sm2算法已经...

    ACM巨全模板 .pdf

    1.数论 素数检验:普通素数判别 线性筛 二次筛法求素数 米勒拉宾素数检验 2.拉格朗日乘子法(求有等式约束条件的极值) 3.裂项(多项式分子分母拆分) 4.扩展欧几里得 (ax+by=c) 5.勾股数 (直角三角形三边长) 6....

    二、线程简析_Linux C 的历程_mysem

    这里我们用之前同时用200个线程计算30000000~30000200之间的质数程序为例,我们在不改变整个程序的结构的前提下,限制同时存在的线程数量(4个)来保证计算机资源能够合理分配理用。 mysem就是简易的信号量封装...

    SLIC超像素分割matlab可调用函数mexw32文件_matlab代码函数C++实现

    SLIC超像素分割原作者只提供C++代码,... %希望划分的超像素数(大概的数目,最终的结果不一定与此相等) m=10; %兼容参数,取值10-40) [klabels,numlabels] = SLICformatlab(J, k, m); %输出:标号矩阵,label数量

    基于C#《密码学与安全协议》期末大作业

    使用 Miller-Rabbin 素性检测方法实现的生成大素数的算法 实现了常见的安全算法,比如 AES 和 3DES 加密算法,RSA加密算法以及DSA 数字签名算法,MD5 以及 SHA-3 哈希算法 设计并实现了一种基于密钥封装协议的安全...

    基于ASP.NET ,可视化算法程序的实现与研究.rar

    本文采用费马小定理测试素数,使用Montgomery加快大数模乘运算,用C++实现RSA加密算法类库,并在32位windows平台封装成组件。在.Net平台引用此组件,实现可以对任意文件进行RSA加密操作的窗体应用程序。经过加密的...

    Java算法大全

    Eratosthenes筛选求质数 超长整数运算(大数运算) 长 PI 最大公因数、最小公倍数、因式分解 完美数 阿姆斯壮数 最大访客数 中序式转后序式(前序式) 后序式的运算 关于赌博 洗扑克牌(乱数...

    数据结构与算法

    Eratosthenes筛选求质数 超长整数运算(大数运算) 长 PI 最大公因数、最小公倍数、因式分解 完美数 阿姆斯壮数 最大访客数 中序式转后序式(前序式) 后序式的运算 关于赌博 洗扑克牌(乱数排列) ...

    java各种经典算法

    Eratosthenes筛选求质数 超长整数运算(大数运算) 长 PI 最大公因数、最小公倍数、因式分解 完美数 阿姆斯壮数 最大访客数 中序式转后序式(前序式) 后序式的运算 关于赌博 洗扑克牌(乱数排列) ...

    经典常用算法 河内塔

    Eratosthenes筛选求质数 超长整数运算(大数运算) 长 PI 最大公因数、最小公倍数、因式分解 完美数 阿姆斯壮数 最大访客数 中序式转后序式(前序式) 后序式的运算 关于赌博 洗扑克牌(乱数排列) ...

    Java和C语言实现各种经典算法(含代码图例)

    Eratosthenes筛选求质数 超长整数运算(大数运算) 长 PI 最大公因数、最小公倍数、因式分解 完美数 阿姆斯壮数 最大访客数 中序式转后序式(前序式) 后序式的运算 关于赌博 洗扑克牌(乱数排列) ...

    ASP.NETRSA可视化算法程序的实现与研究(源代码+毕设)

    本文采用费马小定理测试素数,使用Montgomery加快大数模乘运算,用C++实现RSA加密算法类库,并在32位windows平台封装成组件。在.Net平台引用此组件,实现可以对任意文件进行RSA加密操作的窗体应用程序。经过加密的...

    基于ASP.NET的RSA可视化算法程序系统设计与实现毕业设计(源代码+项目报告)

    本文采用费马小定理测试素数,使用Montgomery加快大数模乘运算,用C++实现RSA加密算法类库,并在64位windows平台封装成组件。在.Net平台引用此组件,实现可以对任意文件进行RSA加密操作的窗体应用程序。经过加密的...

    RSA文件加密程序的设计与实现

    本文采用费马小定理测试素数,使用Montgomery加快大数模乘运算,用C++实现RSA加密算法类库,并在32位windows平台封装成组件。在.Net平台引用此组件,实现可以对任意文件进行RSA加密操作的窗体应用程序。经过加密的...

    经典算法(c&java版)

    • Eratosthenes筛选求质数 • 超长整数运算(大数运算) • 长 PI • 最大公因子、最小公倍数、因式分解 • 完美数 • 阿姆斯特朗数 • 最大访客数 • 中序式转后序式(前序式) • 后序式的运算 关于...

Global site tag (gtag.js) - Google Analytics