在区间内寻找素数

说明:除了1和它本身以外,不能被其他数字整除的数,就叫素数。

实现:

  1. 定义了flag标记位
  2. 遍历   2   到    该数-1  去判断是否有整除的数据,有则改变flag标记位的状态。
  3. 最终通过flag的状态判断是否是素数。
  • 升级:2  到    该数的一半
  • 原因:2是最小数    它的对面即是最大数,遍历的后面一半即是翻转
  • 例如:
  • 16/2=8
  • 16/3=5......1
  • 16/4=4
  • 16/5=3.......1
  • 16/6=2........4
  • 16/7=2........2      只需要遍历到这里即可,下面是重复数字的翻转
  • 16/8=2                翻转第一行
  • 再升级:2  到    该数的开方
  • 如果一个数字a能被整除,即a/x=y;即a=xy; 那么x、y中的一个必定小于a的开方
  • 仔细看上述示例,其实在16/4=4亦是一个分界点
  • 证明:y=\frac{a}{x}      是一个a倍的  \frac{1}{x}    它是一个反比例函数,其对称轴是y=x和y=-x。
  • 它实际上是一个矩形面积,其相乘=16,拖动x就是在规划矩形,即遍历2到该数-1。而又是关于y=x轴对称,所以带入公式 a=x^{2} 即  x=\sqrt{a}  ,那么整个矩形会在这个点(正方形时)进行翻转。

以下是java代码(开方版)

import java.util.Scanner;

//素数  找出101——200有多少个素数   21
public class Test7 {
    public static void main(String[] args) {
        int start;
        int end;
        Scanner sc=new Scanner(System.in);
        start=sc.nextInt();
        end=sc.nextInt();

        search(start,end);
    }

    public static void search(int start, int end) {
        int count=0;
        while(start!=end){
            boolean flag=true;
            for(int i=2;i<=Math.sqrt(start);i++){
                if(start%i==0){
                    flag=false;
                }
            }

            if(flag==true){
                System.out.println(start);
                count++;
            }
            start++;

        }
        System.out.println("此区间内的素数个数是:"+count);
    }

}

ps:第一次写,主要目的是记录下开方证明的灵感。如有错误欠缺之处还请见谅,或者各位大神有更清晰的证明,欢迎在评论区指正交流谢谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值