「java求素数的算法」Java素数求和

博主:adminadmin 2022-11-30 19:10:07 87

本篇文章给大家谈谈java求素数的算法,以及Java素数求和对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

java for循环 求素数

楼主的程序略有误,下为修改后的代码

public class Test {

public static void main(String[] args) {

int i =1,j =2;

for(i=1;i=100;i++) {

for(j=2;j=i;j++){

//素数是指除了1和自身外不能被任何数整除的数

//因此遍历每一个小于i大于2的整数j

if(i%j==0)

//如果i能够被j整除

if(i==j)

//如果当i等于j的时候则满足i是素数的条件,即只能被1(

//j是从2计数的)和自身整除,因此i是素数

System.out.println(i +"是素数");

else

//在如果存在一个小于i大于2的整数j可以整除i,则i必不是

//素数,因此break操作.

break;//如果i可以被j整除且j不等于i,则跳出循环

}

}

}

}

亲测可用..

用java写个程序 判断 用户输入的数 是否是质数?

使用java编写判断自然数是否为素数的方式是,使用scanner来接受用户输入的数值,使用素数的算法,实例如下:

Scanner sr = new Scanner(System.in);

    System.out.print("请输入a的值:");

    int a = sr.nextInt();

    boolean is = true;

    if (a  1)

    {

      System.out.println(a + "不是质数,因为他小于一");

    }

    else

    {

      ListInteger list = new ArrayListInteger();

      for (int i = 2; i  a; i++)

      {

        if (a % i != 1  a % i != a)

        {

          if (a % i == 0){

            is=false;

            list.add(i);

          }

        }

      }

      if(is){

        System.out.println("a是质数");

      }else{

        String yz="";

        for (int i = 0; i  list.size(); i++)

        {

          if (yz=="")

          {

            yz=yz+list.get(i);

          }else{

            yz=yz+","+list.get(i);

          }

        }

        System.out.println("a不是质数,因为他含有因子"+yz);

      }

    }

java中怎么求素数

首先楼主应该对素数的定义已经清楚了吧?其实就是一个数,如果存在1和它本身以外,有数能整除它,这个数就不是素数.

在这里,有2个关键的变量,我估计解释一下你就能看得明白这个算法了.

1.关于变量k.变量k的作用是优化整个算法,因为比如要判断一个数13是不是素数,我们没必要从2循环到13.只要循环到对13开根号.13开根号大概是3.6多,强转为int类型后是3.也就是说只要检查2,3是否能整除13.如果不能,13肯定是一个素数.因为比如48这个数,你前面检测到被4整除等于12,那么继续循环超过Math.sqrt(48)的话,无非就是得到一个反过来的被12除等于4的结果.这个没有必要.

2.关于变量j.注意点1:j是在最外层的循环体中定义的.这个时候刚定义完,j的值是初始的0.然后j从2开始,一直到小于等于k结束.这里是控制尝试整除的循环次数.一旦发现在这个范围内有数能整除i,那么就跳出循环.

所以,对于你不理解的那个部分,首先确定一点,程序只要执行到break,就说明这个数是素数.

例如我们这次k = 10,那么是要从j = 2到10逐一检测 i 是不是能被 j 整除.当j = 7的时候比如可以整除了,就跳出当前内层循环了.这时候, j 显然是不大于 k 的,因为只要是中途跳出,因为内层循环(j = 2; j = k; j++)的控制,只要在循环过程中跳出来的,那么j 肯定 = k.

只有循环到j = 10依然没有break的话,根据for循环的执行顺序,会执行j++,然后去判断j = k 是否为true,为true则继续下一次循环,否则循环结束.而在这里,如果到10还没有能够整除的话,j是会在10的基础上自增的.这时候j就=11了.

那么if ( j k )就不成立了,则i 不会被输出.

总结一点:就是如果中途or最后一次循环,找到能整除的数了,那么因为break的关系,最后就不会执行 j++, 所以j = k的条件是能保证的. 换言之,如果j k (亦即j = k 的取反)表示没有找到能整除的数.其实j最大也就只能等于k+1.

另外,,你也可以自己修改修改,来加深理解.例如

boolean isPrime; //定义布尔变量判断是否素数.是:true;否:false

for (int i = 3; i = 100; i++) {

isPrime = true;

int k = (int) Math.sqrt(i);

for (int j = 2; j = k; j++) {

if (i % j == 0) {

isPrime = false; //如果能够有数整除i,那么就不是素数.

break;

}

}

if (isPrime) {

System.out.println(i);

}

}

这样就没有必要在外层循环里就定义j这个变量了.如果我上面说的你理解还是比较困难,可以先理解用布尔变量来控制的写法.这个理解了,用j k 判断的就也很容易理解了.

java求素数的算法的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于Java素数求和、java求素数的算法的信息别忘了在本站进行查找喔。

The End

发布于:2022-11-30,除非注明,否则均为首码项目网原创文章,转载请注明出处。