求解素数-埃氏筛选

本文介绍了两种在Java中实现素数查找的方法:暴力求解,通过检查每个数是否能被1和自身以外的数整除;以及埃氏筛选,利用合数性质快速排除非素数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是素数了?就是除了0和1之外,一个数只能由1和它本身相乘得来,这就是素数
第一种暴力求解:

package com.fan.suanfati;

import java.util.Scanner;

public class SuShu {
    public static void main(String[] args) {
        System.out.println("请输入数字,以便求出该数字内的素数");
        Scanner scanner = new Scanner(System.in);
        int a = scanner.nextInt();
        int bl = bl(a);
        System.out.println(bl);

    }
    public  static  int  bl(int  n){
        int  count=0;
        for (int i =2 ;  i<n ; i++) {
            count+=isPrime(i)?  1 : 0;
        }
        return count;
    }
     //i*i其利用根号,对其进行了优化,但是注意要有等号
    public  static    boolean    isPrime(int f){
        for (int i = 2; i*i <= f;i++) {
            if (f%i==0){
                return  false;
            }
        }
        return  true;
    }
}

第二种:
埃氏筛选:
怎么理解了?就是一个数是素数,那么这个数乘以2,3,4一直下去,其都是合数,那么就可以进行排除了,这就是埃氏筛选
代码:

package com.fan.suanfati;
//埃式筛选:就素数乘以2   *3  一直乘都是合数,剩下的就是素数
public class suShu1 {
    public static void main(String[] args) {
        int i = aiShi(100);
        System.out.println(i);
    }
    public  static   int   aiShi(int  n){
        boolean[] booleans = new boolean[n];  //默认false表示素数
        int   count=0;
        for (int i = 2; i <n; i++) {
            if (!booleans[i]){
                count++;
                //其一般是j=2*i,但是优化师i*i,因为重复了
                for (int  j=i*i;j<n; j+=i){
                    booleans[j]=true;
                }
            }
        }
        return   count;

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值