王鹿其 发表于 2024-4-6 15:58:51

我的找素数和完全数的代码有没有问题

class thrend1 implements Runnable{
    int sum=0;
    private static boolean isPrime(int k) {
      if(k%2==0&&k>2){
            return false;
      }
      boolean tag=true;
      if(k==2)
            tag=true;
      for(int i=2;i<=Math.sqrt(k);i++){
            if(k%i==0){
                tag=false;
            }
      }
      return tag;
    }
    @Override
    public void run() {
      for (int i = 1; i <10000 ; i++) {
            if(isPrime(i))
                sum+=i;
      }
      System.out.println("素数之和为:"+sum);
    }
}
class thrend2 implements Runnable{
    int sum=0;
   private static boolean isPerfect(int k){
       boolean tag=true;
       int sum1=0;
       for(int i=1;i<k;i++){
         if(k%i==0){
               sum1+=i;
         }
       }
       if(sum1!=k){
         tag=false;
       }
       return tag;
   }
    @Override
    public void run() {
      for (int i = 1; i <10000 ; i++) {
            if(isPerfect(i))
                sum+=i;
      }
      System.out.println("完全数之和:"+sum);
    }
}
public class test02 {
    public static void main(String[] args)throws Exception {
      thrend1 th1=new thrend1();
      thrend2 th2=new thrend2();
      Thread thread1 = new Thread(th1);
      Thread thread2 = new Thread(th2);
      thread1.start();
      thread2.start();
//      thread1.run();
//      thread2.run();
    }
}

FishC 发表于 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 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 我的找素数和完全数的代码有没有问题