java上机实验

我们使用的教材是《java简明教程(第三版)》- 皮德常

创建线程计算素数和

创建线程计算素数和

盲目分析

  看完了《复联3》的我感觉意犹未尽,你们是不是这样呢?那么结尾的彩蛋你们看懂了吗?那个BB机的标志代表的是什么含义呢?那当然是我们的新英雄惊奇队长的标志。好了扯了这么多,其实我就是想拖作业,hhhhhh。不多说,从复联中抽出。

  • 运用多线程(Thread)的技术
  • 了解素数(prime)的计算方式
  • 存储素数的方式

暴力破解

import java.util.Stack;

class PrimeCalculater extends Thread{
    int N, M;
    PrimeCalculater(int n, int m){
        this.N = n;
        this.M = m;
        System.out.println("Program <"+this.N+"-"+this.M+"素数和"+"> initialized");
    }

    @Override
    public void run() {
        System.out.println("Running the program: <"+this.N+"-"+this.M+"素数和"+">");
        // collect the prime
        Stack s = new Stack();
        for (int i = this.N; i <= this.M; i++) {
            int sqrt = (int)Math.sqrt(i);
            for (int j = 2; j <= sqrt; j++){
                if (i % j == 0) break;
                if (j == sqrt) s.add(i);
            }
        }
        // calculate the sum and print array of prime
        int sum = 0;
        while (!s.empty()){
            int peek = (int)s.peek();
            sum += peek;
            System.out.print(s.peek()+" ");
            s.pop();
        }
        System.out.println();
        System.out.println("<"+this.N+"-"+this.M+"素数和"+"> :"+sum);
    }
}

public class TwoThreadPrime {
    public static void main(String[] AUG) {
        PrimeCalculater t_1 = new PrimeCalculater(10,20);
        PrimeCalculater t_2 = new PrimeCalculater(1000,2000);
        t_1.start();
        t_2.start();
    }
}

运行实例:
素数和计算结果

由于是多线程,你们懂得,会出现俩个线程同时运行的情况,所以结果每次不一样。对于输出格式问题有些烦恼,不知道在座各位有没有高明的办法。


素数合集:

<10-20素数和> :60
<1000-2000素数和> :200923
<10-20素数> :19 17 13 11
<1000-2000素数> :
1999 1997 1993 1987 1979 1973 1951 1949 1933 1931 1913 1907 1901 1889 1879
1877 1873 1871 1867 1861 1847 1831 1823 1811 1801 1789 1787 1783 1777 1759
1753 1747 1741 1733 1723 1721 1709 1699 1697 1693 1669 1667 1663 1657 1637
1627 1621 1619 1613 1609 1607 1601 1597 1583 1579 1571 1567 1559 1553 1549
1543 1531 1523 1511 1499 1493 1489 1487 1483 1481 1471 1459 1453 1451 1447
1439 1433 1429 1427 1423 1409 1399 1381 1373 1367 1361 1327 1321 1319 1307
1303 1301 1297 1291 1289 1283 1279 1277 1259 1249 1237 1231 1229 1223 1217
1213 1201 1193 1187 1181 1171 1163 1153 1151 1129 1123 1117 1109 1103 1097
1093 1091 1087 1069 1063 1061 1051 1049 1039 1033 1031 1021 1019 1013 1009

结果并未验证,如有相同,不胜荣幸。


爱狂笑的孩子运气不会差