public class Main{ private static boolean isPrime(int n) { if(n < 2) return false; if(n == 2) return true; if(n%2==0) return false; for(int i = 3; i < n; i += 2) if(n%i == 0) return false; return true; } public static void main(String[] args) { serialConcurrency(); } private static void serialConcurrency() { long time = System.currentTimeMillis(); //任务切换标识,1代表A任务,2代表B任务 int task = 1; //计数器 long count1 = 0, count2 = 0; int i=1,j=100001; while (true) { if(task == 1 && i++<=100000) { if(isPrime(i)) count1+=i; task = 2; } else if(task == 2 && j++<=200000) { if(isPrime(j)) count2+=j; task = 1; } else{ break; } } System.out.println("1-100000之间质数和为"+count1); System.out.println("100001-200000之间质数和为"+count2); System.out.println("总耗时:"+(System.currentTimeMillis() - time) + "毫秒"); } }
时间: 2024-02-14 21:09:40 浏览: 21
java基础50道经典练习题及答案.pdf
这段代码是一个Java程序,主要用于计算在1到200000之间的所有质数的和,并使用串行和并行两种方式实现。
在串行方式中,程序使用一个while循环来遍历1到200000之间的所有数字,对于每一个数字,程序判断其是否为质数,如果是,则将其加入到对应的计数器中。最后输出1到100000之间质数和、100001到200000之间质数和以及总耗时。
在并行方式中,程序使用两个线程分别计算1到100000和100001到200000之间的质数和,每个线程独自计算并行执行,最后合并结果并输出总耗时。
需要注意的是,这段代码中的质数判断方法isPrime采用了基本的试除法,即从3到n-1枚举每个数字并判断是否能够整除n。这种方法在处理大量数据时效率较低,可以考虑使用更高效的质数判断算法。
阅读全文