java代码生成(编写一个测试程序,用多线程计算1万以内素数之和与完全数之和的乘积。)
时间: 2024-05-05 21:16:40 浏览: 100
以下是一个java程序,用多线程计算1万以内素数之和与完全数之和的乘积:
```
import java.util.ArrayList;
import java.util.List;
public class PrimeAndPerfectNumberMultiplication {
public static void main(String[] args) {
// 创建两个线程,一个计算素数之和,一个计算完全数之和
PrimeSumThread primeSumThread = new PrimeSumThread();
PerfectNumberSumThread perfectNumberSumThread = new PerfectNumberSumThread();
// 启动线程
primeSumThread.start();
perfectNumberSumThread.start();
// 等待线程计算完成
try {
primeSumThread.join();
perfectNumberSumThread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
// 计算乘积
long result = primeSumThread.getSum() * perfectNumberSumThread.getSum();
System.out.println("1万以内素数之和与完全数之和的乘积为:" + result);
}
// 判断一个数是否为素数
public static boolean isPrime(int n) {
if (n <= 3) {
return n > 1;
} else if (n % 2 == 0 || n % 3 == 0) {
return false;
} else {
for (int i = 5; i * i <= n; i += 6) {
if (n % i == 0 || n % (i + 2) == 0) {
return false;
}
}
return true;
}
}
// 判断一个数是否为完全数
public static boolean isPerfectNumber(int n) {
int sum = 1;
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) {
sum += i;
if (i != n / i) {
sum += n / i;
}
}
}
return sum == n && n != 1;
}
// 计算素数之和的线程
static class PrimeSumThread extends Thread {
private long sum = 0;
@Override
public void run() {
for (int i = 2; i <= 10000; i++) {
if (isPrime(i)) {
sum += i;
}
}
}
public long getSum() {
return sum;
}
}
// 计算完全数之和的线程
static class PerfectNumberSumThread extends Thread {
private long sum = 0;
@Override
public void run() {
for (int i = 2; i <= 10000; i++) {
if (isPerfectNumber(i)) {
sum += i;
}
}
}
public long getSum() {
return sum;
}
}
}
```
阅读全文