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

举报
红目香薰 发表于 2022/01/24 22:32:53 2022/01/24
【摘要】 ​Java_质数什么是质数:"质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。"测试两个求质数的方式:测试数据一、测试数量【10万】方式一:Boolean/** * 1、100000以内的质数 */ ...

Java_质数

什么是质数:

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

测试两个求质数的方式:

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

方式一:Boolean

/**                                           
 * 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)+"毫秒");

方式二:【&】

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】啊

System.gc();

对比图:【去掉输出】

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

测试数据二、【1000000】百万

测试编码:

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)+"毫秒");
	}
}

效果:

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

希望能对大家有所帮助

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。