songjing 发表于 2022-3-1 15:19

java 求出100以内的质数,并8个一行进行输出

就前两天嘛我们人事小姐姐也在学java他们看的那个视频,老师讲的是 刚出来10个人有两个能写出来这个问题就算可以了
我能认怂吗

这不手拿把掐优化不是很好 效果出来了 后期闲了继续优化

其实还直接可以算平方根好像更快

package com.cron.cron.test;

import java.util.ArrayList;
import java.util.List;

/**
* ClassName: testZhi
* Description:
* date: 2022/2/25 18:24
*
* @AuThor robotname a
* @author dev whz
* @Since JDK 1.8
*/
public class testZhi {
    public static void main(String[] args) {
      List<Integer> integers = new ArrayList<>();
      int num=100;
      //根据算术基本定理,每一个比1大的整数,要么本身是一个质数,要么可以写成一系列质数的乘积;而且如果不考虑这些质数在乘积中的顺序,那么写出来的形式是唯一的。最小的质数是2
      for (int i = 2; i <= num; i++) {
            int j = 2;
            while (j <= i - 1) {
                if (i % j == 0) {
                  break;
                }
                j++;
            }

            if (j == i) {
                integers.add(i);
            }
      }

      int count = integers.size() / 8;
      //取余
      int yu = integers.size() % 8;
      //判断是否还有余数
      if (yu > 0) {
            count = count + 1;
      }
      for (int i = 0; i < count; i++) {
            List<Integer> subList = new ArrayList<Integer>();
            if (i == count - 1) {
                subList = integers.subList(i * 8, integers.size());
            } else {
                subList = integers.subList(i * 8, 8 * (i + 1));
            }
            System.out.println(subList);
      }
    }
}

TeMoon 发表于 2022-3-1 16:03

本帖最后由 TeMoon 于 2022-3-1 16:04 编辑

public class Dome{
public static void main(String[] args) {
                System.out.println("2 "+"3 "+"5 "+"7 "+"11 "+"13 "+"17 "+"19");
                System.out.println("23 "+"29 "+"31 "+"37 "+"41 "+"43 "+"47 "+"53");
                System.out.println("59 "+"61 "+"67 "+"71 "+"73 "+"79 "+"83 "+"89");
                System.out.println(97);
        }
}

fxzh007 发表于 2022-3-1 15:35

package com.gx.demo;

public class Demo1 {
        public static void printPrimeNumber(int range) {
                int i, num, num2, sum = 0;
                for (num = 2; num <= range; num++) {
                        num2 = (int) Math.sqrt(num);//Math.sqrt取num这个变量的开方
                        for (i = 2; i <= num2; i++) {//质数是只能被1跟自身整除的数,1不是质数
                                if (num % i == 0)
                                        break;
                        }
                        if (i == num2 + 1) {
                                sum++;
                                System.out.print(num + "\t");
                                if (sum % 8 == 0)
                                        System.out.println();
                        }
                }
        }

        public static void main(String[] args) {
                // 打印100以内的素数
                printPrimeNumber(100);
        }

}

songjing 发表于 2022-3-1 15:51

fxzh007 发表于 2022-3-1 15:35
package com.gx.demo;

public class Demo1 {


牛逼大哥我还沉沦再你写的代码里这个为什么要求这个开方呢

永恒陌 发表于 2022-3-1 16:15

songjing 发表于 2022-3-1 15:51
牛逼大哥我还沉沦再你写的代码里这个为什么要求这个开方呢

你拿12来举例子。   计算到3*4了。然后下一步又该计算4*3了。所以 开方, 只求前边一半就可以了。后边的都是无效计算

songjing 发表于 2022-3-1 16:18

永恒陌 发表于 2022-3-1 16:15
你拿12来举例子。   计算到3*4了。然后下一步又该计算4*3了。所以 开方, 只求前边一半就可以了。后边 ...

昂 明白了感谢感谢没想到这么牛逼谢谢 谢谢

songjing 发表于 2022-3-1 16:19

TeMoon 发表于 2022-3-1 16:03
public class Dome{
public static void main(String[] args) {
                System.out.pr ...

高司令都夸你的代码执行快

大方 发表于 2022-3-1 16:43

我们老师也留这个作业,不过是用python和java分别实现的。

提速的2个关键,一个是只最大到小于平方根,一个是把计算出来的素数放到一个数组里,当检测的时候只检测质数即可,不用所有的数字都检测。
这样会提速很多。

目前算到了第279238341033925个素数是9999999999999937

Rene 发表于 2022-3-1 17:32

TeMoon 发表于 2022-3-1 16:03
public class Dome{
public static void main(String[] args) {
                System.out.pr ...

T老师还得是你啊

whsdaks 发表于 2022-3-1 17:54

TeMoon 发表于 2022-3-1 16:03
public class Dome{
public static void main(String[] args) {
                System.out.pr ...

这么多字符串拼接,建议stringBuilder
页: [1] 2
查看完整版本: java 求出100以内的质数,并8个一行进行输出