Java_质数_两种解法(时间对比)

2022-11-29 17:29:06 浏览数 (1)

Java_质数

什么是质数:

"质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。"

测试两个求质数的方式:

测试数据一、测试数量【10万】

方式一:Boolean

代码语言:javascript复制
/**                                           
 * 1、100000以内的质数                              
 */                                           
int num=10000;                                
long start = System.currentTimeMillis();      
for (int i = 2; i <= num; i  ) {              
	boolean b=true;                           
	for (int j = 2; j <i; j  ) {              
		if(i%j==0){                           
			b=false;                          
			break;                            
		}                                     
	}                                         
	if(b){                                    
		System.out.println(i);                
	}                                         
}                                             
long end = System.currentTimeMillis();        
System.out.println("第一种用时:" (end-start) "毫秒");

方式二:【&】

代码语言:javascript复制
int num=10000;                                     
long start1 = System.currentTimeMillis();          
for(int i=2;i<=num;i  ) {			               
    for(int j=2;j<=i;j  ) {                        
        if(i%j==0 && i!=j) {                       
            break;					               
        }                                          
        if(j==i) {                                 
            System.out.println(i);					
        }				                           
    }                                              
}                                                  
long end1 = System.currentTimeMillis();            
System.out.println("第二种用时:" (end1-start1) "毫秒");   

测试的时候中间加上【gc】啊

代码语言:javascript复制
System.gc();

对比图:【去掉输出】

总结:两者相较差不多,所以那种都可以。

测试数据二、【1000000】百万

测试编码:

代码语言:javascript复制
package test;

public class Action {
	public static void main(String[] args) {
		/**
		 * 1、100000以内的质数
		 */
		int num=1000000;
		long start = System.currentTimeMillis();
		for (int i = 2; i <= num; i  ) {
			boolean b=true;
			for (int j = 2; j <i; j  ) {
				if(i%j==0){
					b=false;
					break;
				}
			}
			if(b){
//				System.out.println(i);
			}
		}
		long end = System.currentTimeMillis();
		System.out.println("第一种用时:" (end-start) "毫秒");
		System.gc();
		long start1 = System.currentTimeMillis();
		for(int i=2;i<=num;i  ) {			
            for(int j=2;j<=i;j  ) {
                if(i%j==0 && i!=j) {
                    break;					
                }
                if(j==i) {
//                    System.out.println(i);					
                }				
            }
        }
		long end1 = System.currentTimeMillis();
		System.out.println("第二种用时:" (end1-start1) "毫秒");
	}
}

效果:

基本上可以看出来,第二种的方式消耗时间还是稍微多一点点的。

希望能对大家有所帮助

0 人点赞