public static void main(String[] args) {
int count=0
int prime=1
while(count<100){
while(true){
prime++
if(isPrime(prime)){
System.out.print(prime+"||")
count++
if(count%10==0){
System.out.println(" ")
break
}
}
}
}
}
public static boolean isPrime(int n){
for(int i=2i<ni++){
if(n%i==0){
return false
}
}
if(n==1){
return false
}
return true
}
1、Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、拦拿数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
2、Java是由Sun Microsystems公司推出的Java面向对象程序设计语言(以下简称Java语世举言)和Java平台的总称。由James Gosling和同事们共同研发,并在1995年正式推出。Java最初被称为Oak,是1991年为消费类电子产品的嵌入式芯片而设计的。1995年更名为Java,并重新设计用于开发Internet应用程序。
3、用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨搜衡碧平台、动态Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器均支持Javaapplet。另一方面,Java技术也不断更新。Java自面世后就非常流行,发展迅速,对C++语言形成有力冲击。在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。2010年Oracle公司收购Sun Microsystems。
我写了几种方法,并逐步优化,并且对每一种方法进行了1000000次的调用测试每种方法的速度,仅供参考:
import java.math.BigIntegerpublic class Test_04 {
/**
* 最笨重的一种方法,用该整数分别除以比它小的数,看是否能被整除
*/
public boolean isPrimeNum_1(int num) {
// 识别小于2的数
if (num < 2) {
return false
}
for (int i = 2 i < num i++) {
if (num % i == 0) {
return false
}
}
return true
}
/**
* 优化第一种方法<br>
* 1、偶数不可能是质数<br>
* 2、对于大于2的数,如果一个数a大于数b的一半,那么b不可能被a整除
含悄薯 */
public boolean isPrimeNum_2(int num) {
// 2特殊处理
if (num == 2) {
return true
}
// 识别小于2的数和偶数
if (num < 2 || num % 2 == 0) {
return false
}
int max = num / 2
for (int i = 3 i < max i += 2) 谈者{
if (num % i == 0) {
return false
}
}
return true
}
/**
* 在第二种方法上再次优化,利用数字的性质:<br>
* 一个数不是素数就是合数,那么一定可以由两个自然数相乘得到,其中一个大于或等于它的平方根,<br>
* 一个小于或等于它的平方根,并且成对出现。<br>
* 这样就可以把计算量大幅度减少
*/
public boolean isPrimeNum_3(int num) {
if (num == 2) {
return true// 2特殊处理
}
if (num < 2 || num % 2 == 0) {
return false// 识别小于2的数和偶数
}
double sqrt = Math.sqrt(num)
for (int i = 3 i <= sqrt i += 2) {
if (num % i == 0) {
return false
}
}
return true
}
/**
* Java中的BigInteger中已经写好了一个判断是否为质数的方法,直接用就可以了
*/
public boolean isPrimeNum_4(int num) {
BigInteger integer = BigInteger.valueOf(num)
return integer.isProbablePrime(1)
}
public static void main(String[] args) {
Test_04 test_04 = new Test_04()
int num = 991
System.out.println(test_04.isPrimeNum_1(num))
long startTime = System.currentTimeMillis()
for (int i = 0 i < 1000000 i++) {
test_04.isPrimeNum_1(num)
}
long endTime = System.currentTimeMillis()
System.out.println("第一种方法运行时间:" + (endTime - startTime) + "ms")
System.out.println(test_04.isPrimeNum_2(num))
startTime = System.currentTimeMillis()
for (int i = 0 i < 运绝1000000 i++) {
test_04.isPrimeNum_2(num)
}
endTime = System.currentTimeMillis()
System.out.println("第二种方法运行时间:" + (endTime - startTime) + "ms")
System.out.println(test_04.isPrimeNum_3(num))
startTime = System.currentTimeMillis()
for (int i = 0 i < 1000000 i++) {
test_04.isPrimeNum_3(num)
}
endTime = System.currentTimeMillis()
System.out.println("第三种方法运行时间:" + (endTime - startTime) + "ms")
System.out.println(test_04.isPrimeNum_4(num))
startTime = System.currentTimeMillis()
for (int i = 0 i < 1000000 i++) {
test_04.isPrimeNum_4(num)
}
endTime = System.currentTimeMillis()
System.out.println("第四种方法运行时间:" + (endTime - startTime) + "ms")
}
}
输出结果:
true第一种方法运行时间:2732ms
true
第二种方法运行时间:671ms
true
第三种方法运行时间:68ms
true
第四种方法运行时间:1064ms
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)