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: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);
}
} 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);
}
}
fxzh007 发表于 2022-3-1 15:35
package com.gx.demo;
public class Demo1 {
牛逼大哥我还沉沦再你写的代码里这个为什么要求这个开方呢 songjing 发表于 2022-3-1 15:51
牛逼大哥我还沉沦再你写的代码里这个为什么要求这个开方呢
你拿12来举例子。 计算到3*4了。然后下一步又该计算4*3了。所以 开方, 只求前边一半就可以了。后边的都是无效计算 永恒陌 发表于 2022-3-1 16:15
你拿12来举例子。 计算到3*4了。然后下一步又该计算4*3了。所以 开方, 只求前边一半就可以了。后边 ...
昂 明白了感谢感谢没想到这么牛逼谢谢 谢谢 TeMoon 发表于 2022-3-1 16:03
public class Dome{
public static void main(String[] args) {
System.out.pr ...
高司令都夸你的代码执行快 我们老师也留这个作业,不过是用python和java分别实现的。
提速的2个关键,一个是只最大到小于平方根,一个是把计算出来的素数放到一个数组里,当检测的时候只检测质数即可,不用所有的数字都检测。
这样会提速很多。
目前算到了第279238341033925个素数是9999999999999937
TeMoon 发表于 2022-3-1 16:03
public class Dome{
public static void main(String[] args) {
System.out.pr ...
T老师还得是你啊 TeMoon 发表于 2022-3-1 16:03
public class Dome{
public static void main(String[] args) {
System.out.pr ...
这么多字符串拼接,建议stringBuilder
页:
[1]
2