|
发表于 2024-4-6 15:59:08
|
显示全部楼层
您的代码有一些问题。首先,在class名称上有一个小错误,应该是`Thread1`而不是`thrend1`。其次,您在代码中使用了多线程,并且将寻找素数和完全数的逻辑放在了`run`方法中。但是,在您的代码中没有调用`Thread.start()`方法来启动线程,因此代码不会执行。另外,如果您只是想要寻找素数和完全数,并不需要使用多线程,可以直接在主线程中进行操作。
下面是一个修正后的示例代码来寻找素数和完全数。
- import java.util.ArrayList;
- import java.util.List;
- public class PrimeAndPerfect {
- private static boolean isPrime(int num) {
- if (num <= 1) {
- return false;
- }
-
- for (int i = 2; i <= Math.sqrt(num); i++) {
- if (num % i == 0) {
- return false;
- }
- }
-
- return true;
- }
- private static boolean isPerfect(int num) {
- int sum = 0;
-
- for (int i = 1; i < num; i++) {
- if (num % i == 0) {
- sum += i;
- }
- }
-
- return sum == num;
- }
- public static void main(String[] args) {
- List<Integer> primes = new ArrayList<>();
- List<Integer> perfects = new ArrayList<>();
- for (int i = 1; i <= 100; i++) {
- if (isPrime(i)) {
- primes.add(i);
- }
- if (isPerfect(i)) {
- perfects.add(i);
- }
- }
- System.out.println("素数:");
- for (int prime : primes) {
- System.out.print(prime + " ");
- }
- System.out.println("\n完全数:");
- for (int perfect : perfects) {
- System.out.print(perfect + " ");
- }
- }
- }
复制代码
这段代码会输出100以内的素数和完全数。注意,在代码中判断一个数是否为素数时,我们只需要从2到sqrt(n)进行遍历,提高了算法效率。对于完全数的判断,我们遍历小于该数的所有因子并求和,如果和等于该数,则该数为完全数。
希望这个例子对您有所帮助!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|